gpt4 book ai didi

node.js - socket.emit 在一个用 NodeJS 编写的简单 TCP 服务器中?

转载 作者:可可西里 更新时间:2023-11-01 02:33:34 26 4
gpt4 key购买 nike

[如您所见,我不太了解 TCP 服务器和客户端的基本概念,可能 socket.emit 甚至不可能,但我想知道最好的替代方案或类似的东西。 ..]

Socket.io 有一个漂亮的东西可以发出事件并在另一端捕获它们,它在它的首页 (http://socket.io)。我可以做类似的事情但使用 NodeJS 的常规“网络”模块吗?如果不是那么等同于什么?

我试过:

服务器.js

var server = net.createServer(function(socket) {
socket.on("connect",function() {
socket.emit('test',{msg : 'did you get it ?'});
});
}).listen(8000);

客户端.js

var client = net.createConnection(8000, localhost);
client.on('connect',function(){
client.on('test',function(data) {
console.log(data.toString());
});
});

但如您所想,它不起作用。我怎样才能做到这一点?

提前致谢。

最佳答案

嗯,net 只是 TCP 的一个接口(interface)。要发送和接收消息,您需要在 TCP 之上设计和实现您自己的协议(protocol)。 TCP 是面向流的协议(protocol),而不是面向消息的。这意味着您必须为读者发明一种分隔消息的方法。分隔消息的最简单方法是在它们之间插入\n 字符。将消息编码为字节流的最简单方法是使用 JSON.stringify。所以:

客户端.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))
})

服务器.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);

你可以从这里入手,再详细阐述。例如,您可以在接收端使用 EventEmitter 库类,并在接收到不同的消息时发出不同的事件。

'lazy' 模块在 NPM 上可用,用于将接收字节流拆分为单独的行。拆分可以手动完成,但需要多写 20 行代码。请参阅“脏”NPM 模块的源代码以了解拆分的示例实现 - 它很麻烦,因此在这种情况下具有外部依赖性是有充分根据的。

关于node.js - socket.emit 在一个用 NodeJS 编写的简单 TCP 服务器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com