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

时间:2015-08-18 03:51:46

标签: ios node.js tcp

这是我关于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;

但我不知道如何检测图像边界,以便我可以将新的缓冲区数据发送给其他客户端。 我怎么能解决这个问题,请帮忙......抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

实际上,这不是关于nodejs或chat app的问题,这是关于协议设计的一般性问题。

您可以根据现有协议使用/设计协议:

  1. ProtocolBuffer,由Google提供:https://github.com/google/protobuf,这是nodejs中的ProtocolBuffer实现之一:https://github.com/mafintosh/protocol-buffers

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

  3. 设计您自己的简单:服务器端重复按此顺序接收数据:

  4. type:int,length:int,body:bytes

    这意味着客户端每次与服务器交互时都应遵循此规则,首先发送“int”以指示消息类型,然后发送“int”以指示消息的长度,最后发送消息体。

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