我目前正在开发一个简单的NodeJS客户端,它使用网络类连接到PHP服务器。此外,NodeJS客户端还可以作为Socket.IO服务器,将从PHP服务器接收到的数据发送到与Socket.IO.连接的浏览器。
到目前为止,一切都很好。但是如果我连接另一个客户端到Socket。IO,PHP服务器必须向每个连接的客户端发送通知。因此,它向NodeJS客户机发送一个JSON编码的数组,由客户机处理JSON数据(解码并稍微修改一下)。
现在的问题是,有时PHP服务器发送的两条单独的消息会连接在NodeJS的onData事件处理函数中:
client.on("data", function(data) {
var msgData = JSON.parse(data.toString("utf8"));
[...]
}
变量数据现在有时(不是每次!)包含两个 JSON 字符串,例如:
{ "todo":"message", [...] } { "todo":"message", [...] }
这当然会导致JSON.parse函数抛出异常。我预计会调用onData-函数两次,变量data为:
{ "todo":"message", [...] }
在 PHP 服务器端,我必须遍历一个包含当前提供的所有 Socket.IO 连接的数组:
foreach($sockets as $id => $client) {
$nodeJS->sendData($client, array("todo" => "message", [...]);
}
$nodeJS-
socket_write($nodeClient, json_encode($dataToSend));
$nodeJS-
我现在不知道PHP或NodeJS是连接这两个字符串。我想要的是,NodeJS每次调用$nodeJS-时都会调用onData-handler一次
有没有更容易的方法来实现这一点?
尝试在PHP端的JSON字符串后面添加一行。
重要的是要记住,当您从套接字读取时,数据将以任意块的形式出现,完全取决于您的代码将它们拆分为有意义的处理单元;绝对不能保证每个块将对应于一个有意义的单位。
yannisgu已经为您提供了解决方案的第一部分(用换行符终止每个单元,这样您的代码可以知道它在哪里结束):现在您需要实现第二部分,即缓冲您的传入数据并将其拆分成单元。
在初始化时,执行以下操作
var buf = '';
并将< code>client的编码设置为utf8。
在您的“数据”
处理程序中:[更新:合并了 josh3736 的建议]
buf += data;
var idx;
while ((idx = buf.indexOf('\n')) >= 0) {
// there's at least one complete unit buffered up
var unit = buf.slice(0, idx);
// extract it
if (unit.slice(-1) == '\r') {
// CRLF delimited
unit = unit.slice(0, -1);
}
if (unit.length) {
// ignore empty strings
var msgData = JSON.parse(unit);
[...]
// process it
}
buf = buf.slice(idx +1);
// discard it
}
// at this point, buf is either empty or contains an incomplete
// unit which will be processed as soon as the rest of it comes in
我有一个nodejs聊天服务器,它有不同的事件“Connection”,“SendChat”,“Switchroom”... null Thx很多!
我在做一个应用程序,把一些数据存储在数据库中,然后它再检索它。在服务器端,我使用的是PHP,在客户端,我有一个获取输入并将其传递给PHP文件的文件。 另外,我有这个JsonParser:
有人知道netty服务器处理程序取消从web服务器接收数据的最佳方法吗?我有一个服务器处理程序,它将HttpRequests代理到web服务器。但是,当请求客户端取消请求时,我希望在不关闭服务器处理程序和web服务器之间的连接的情况下停止从web服务器接收服务器通道上的数据。 有谁知道我怎么才能做到这一点。你的答复将不胜感激。 非常感谢。
我想连接到树莓Pi节点。我从网络外部设置的js服务器。 我的路由器声称端口是开放的。我尝试在127.0.0.0、0.0.0.0和我的公共IP地址运行服务器。 我曾尝试使用ngrok打开端口8080,服务器在其中托管一个简单的网页,但尝试访问myIP:8080不起作用。 有人能帮我吗?
我想做的是: 为了学习游戏编程,我使用专用服务器和UDP创建了一个回声设置。专用服务器在不同的城市(也就是不在我的本地网络中)。 在我的本地计算机上,我有一个udp客户端和服务器(两个不同的程序)。当我第一次启动python服务器时,windows防火墙立即询问我是否要添加异常。在允许我的python服务器联网之后,我仍然没有收到任何消息。(客户- 我的问题是: 游戏如何解决这个问题?我没有为我想
我试图用php执行nodejs,这样做非常简单 我的nodejs文件创建了一个带有Express的服务器。 当文件运行时,这就是输出 错误:侦听EACCES 127.0。0.1:82 bject.exports._errnoException(util.js:873: 11) 在出口方面_主机端口例外(util.js:896:20) 在服务器上_listen2(net.js:1237:19) 听(
我有一个示例代码如下,套接字绑定到IP10.10.88.11和端口9876。我用下面的wireshark测试了2种情况。两台电脑都在同一个子网中。 从同一PC发送UDP数据包(10.10.88.11)-UDP服务器能够接收 从另一台电脑发送UDP数据包(10.10.88.10)-UDP服务器无法接收,但Wireshark(在10.10.88.11)能够捕获数据包 我在网上搜索过,但找不到解决办法。
我试图让一些基于PAHO的客户机使用Vert.x MQTT服务器。我试图发布到我的接收客户端订阅的测试主题。我很难从客户端发布者向客户端订阅者发送消息。 使用我在Internet上看到的真实例子,我构建了一个MQTT代理。vert.x MQTT代理代码的代码如下所示: 我很确定我在这里错过了什么,但我想不出会是什么。有人能帮我把这个弄好吗??? 提前感谢您的任何帮助或见解。