Joã*_*imo 4 tcp tcpclient node.js socket.io
[如你所见,我不明白一个TCP服务器和客户端的基本概念非常好,大概socket.emit甚至是不可能的,但我想知道的最佳替代品或类似的事情...]
Socket.io有一个发送事件并在另一侧捕获它们的美妙事物,它在它的第一页(http://socket.io).我可以使用NodeJS的常规'net'模块做类似的事吗?如果不是那么相同的是什么?
我试过了:
server.js
var server = net.createServer(function(socket) {
socket.on("connect",function() {
socket.emit('test',{msg : 'did you get it ?'});
});
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
client.js
var client = net.createConnection(8000, localhost);
client.on('connect',function(){
client.on('test',function(data) {
console.log(data.toString());
});
});
Run Code Online (Sandbox Code Playgroud)
但是你可以想象,它不起作用.我怎样才能做到这一点?
提前致谢.
那么,net只是TCP的一个接口.要发送和接收消息,您需要在TCP之上设计和实现自己的协议.TCP是面向流的协议,而不是面向消息的协议.这意味着您必须为读者创造一种分离消息的方法.分隔消息的最简单方法是在它们之间插入\n字符.将消息编码为字节流的最简单方法是使用JSON.stringify.所以:
client.js
var Lazy = require('lazy'), net = require('net')
var client = net.createConnection(8000)
new Lazy(client).lines.forEach(function (msg)
{
console.log(JSON.parse(msg))
})
Run Code Online (Sandbox Code Playgroud)
server.js
var net = require('net')
var server = net.createServer(function(socket) {
socket.on("connect",function() {
var str = JSON.stringify({foo : 'test', msg : 'did you get it ?'}) + "\n"
socket.write(str)
});
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
你可以从这开始并详细说明.例如,您可以在接收方使用EventEmitter库类,并在接收到不同消息时发出不同的事件.
'lazy'模块在NPM上可用,用于将接收字节流拆分为单独的行.拆分可以手工完成,但需要20行代码.请参阅"脏"NPM模块的来源,以获得拆分的示例 - 它很麻烦,因此在这种情况下具有外部依赖性是有充分根据的.
| 归档时间: |
|
| 查看次数: |
6928 次 |
| 最近记录: |