是否可以使用标准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进行通信。
答案 0 :(得分:3)
Websockets是一种在TCP / IP上运行的协议,详见standard's draft。
因此,实际上,所有关于使用TCP / IP连接(TCP连接类/对象)来实现协议的特定握手和数据成帧。
用Ruby编写的Plezi Framework就是这样做的。
它将TCPSocket类包装在名为Connection
(或SSLConnection
)的包装器中,并通过协议输入层(WSProtocol和{{3}运行数据} class)到app层,然后通过Protocol输出层(HTTPProtocol和WSResponse类)到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。
如果你谷歌,有很多例子。我确定其中一些将使用您喜欢的编程语言。