sockets - 使用 TCP 类与 WebSocket 服务器通信

标签 sockets tcp websocket client

是否可以使用标准 TCP 类向 WebSocket 服务器接口(interface)发送和接收数据/消息/帧?

或者我是否需要从根本上改变 TCP 类?

如果可能的话,你能给我举个例子吗? (编程语言并不重要)
例如,我找到了代表简单 tcp 客户端的 node.js 代码:

var net = require('net');

var client = new net.Socket();
client.connect(1337, '127.0.0.1', function() {
    console.log('Connected');
    client.write('Hello, server!');
});

client.on('data', function(data) {
    console.log('Received: ' + data);
});

也许您可以告诉我必须更改哪些内容才能使其与 WebSocket 通信。

最佳答案

Websockets 是一种在 TCP/IP 上运行的协议(protocol),详见 standard's draft .

所以,其实都是利用TCP/IP连接(TCP连接类/对象)来实现协议(protocol)特定的握手和数据分帧。

Plezi Framework ,用 Ruby 编写,正是这样做的。

它将 TCPSocket 类包装在名为 Connection(或 SSLConnection)的包装器中,并通过协议(protocol)输入层(WSProtocolHTTPProtocol 类)运行数据) 到应用层,然后通过协议(protocol)输出层(WSResponseHTTPResponse 类)到连接:

 TCP/IP receive -> Protocol input layer ->
     App -> Protocol output -> TCP/IP send

Websocket 握手总是从 HTTP 请求开始。你可以阅读the Plezi's handshake code here *.

* 握手方法接收 HTTPRequest、HTTPResponse 和 App Controller,并在切换到 Websockets 之前使用它们发送所需的 HTTP 回复。

握手完成后,收到的每条消息都由消息帧(一个或多个)组成。您可以阅读 frame decoding and message extraction code used in the Plezi Framework here .

在发回消息之前,它们被分成一个或多个Websocket Protocol frames using this code然后他们是sent using the TCP/IP connection .

如果你谷歌一下,有很多例子。我相信其中一些会使用您喜欢的编程语言。

关于sockets - 使用 TCP 类与 WebSocket 服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828918/

相关文章:

ios - 我需要 iOS 上的库来制作 Microsoft directLine-botframework 客户端

Java - 在哪里检测和捕获 SocketException

java - 通过套接字连接的多个 HTTP 请求

networking - tcp reno、newreno 和慢启动

spring - TcpSendingMessageHandler 与 TcpReceivingChannelAdapter 协作

python - 发送 'websocket.send'后运行时错误: Unexpected ASGI message 'websocket.close' ,

jsf - f :websocket in JSF 2. 3

c++ - 是否可以配置 UDP 多播套接字以便可以调用 write() 而不是 sendto()?

c - 防止 getpeername() 返回 127.0.0.1

sockets - TCP 套接字是否需要有线连接?