使用TCP类与WebSocket服务器通信

时间:2015-06-14 11:40:38

标签: sockets tcp websocket client

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

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

如果可以的话,你能告诉我一个它看起来如何的小例子吗? (编程语言并不重要)
例如,我发现这个node.js代码代表一个简单的tcp客户端:

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进行通信。

1 个答案:

答案 0 :(得分:3)

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

因此,实际上,所有关于使用TCP / IP连接(TCP连接类/对象)来实现协议的特定握手和数据成帧。

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

它将TCPSocket类包装在名为Connection(或SSLConnection)的包装器中,并通过协议输入层(WSProtocol和{{3}运行数据} class)到app层,然后通过Protocol输出层(HTTPProtocolWSResponse类)到Connection:

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

Websocket握手始终作为HTTP请求启动。您可以阅读HTTPResponse *。

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

握手完成后,收到的每条消息都由消息帧(一个或多个)组成。您可以阅读the Plezi's handshake code here

在发回邮件之前,它们分为一个或多个frame decoding and message extraction code used in the Plezi Framework here,然后它们是Websocket Protocol frames using this code

如果你谷歌,有很多例子。我确定其中一些将使用您喜欢的编程语言。