IOS聊天室应用程序通过node.js发送图像



这是我关于stackoverflow的第一个问题。当然,这个问题围绕着我很多天。我正在编程一个聊天应用程序使用node.js作为服务器,这里的服务器代码:

var net = require('net');
var chatServer = net.createServer(),clientList = [];
chatServer.on("connection", function(client){
        client.name = client.remoteAddress + ":" + client.remotePort;
        console.log(client.name);
        client.write("Hi!n");
        clientList.push(client);
        client.on("data",function(data){
                console.log(data);
                broadcast(data,client);
                })
})
chatServer.listen(1234);
function broadcast(message,client){
        var cleanup = [];
        for(var i=0;i<clientList.length;i++){
        if(client != clientList[i]){
                if(clientList[i].writable){
                        clientList[i].write(client.name = message);
                } else {
                cleanup.push[clientList[i]];
                clientList[i].destroy();
                }
        }
        }
}

在发送文本时没问题,但是当发送图像时,一旦node.js默认缓冲区已满(因为图像足够大,所以缓冲区包含图像的一部分),它将执行下面的代码

client.on("data",function(data){
                console.log(data);
                broadcast(data,client);

和另一个客户端只接收部分图像数据。我的想法是创建一个新的缓冲区,如:

buffer += data;

,但我不知道如何检测图像边界,以便我可以将新的缓冲区数据发送到其他客户端。我该如何解决这个问题,请帮忙…

实际上,这不是一个关于nodejs或聊天应用程序的问题,而是一个关于协议设计的一般性问题。

你可以在现有协议的基础上使用/设计你的协议:

  1. 协议缓冲区,由Google: https://github.com/google/protobuf提供支持,这是nodejs中的协议缓冲区实现之一:https://github.com/mafintosh/protocol-buffers

  2. RPC, nodejs中的实现之一:http://www.zerorpc.io

  3. 你自己设计一个简单的:服务器端按照这个顺序反复接收数据:

类型:int,长度:int,主体:bytes

这意味着客户端每次要与服务器交互时都应该遵循此规则,首先发送一个"int"来指示消息类型,然后发送一个"int"来指示消息长度,最后是消息体。

如果您要构建高度可伸缩的大型项目,我建议您使用ProtocolBuffer。或者你设计一个简单的协议(就像我在3中写的那样),如果你正在写一个实践项目。

最新更新