我正在玩一个简单的 WebSockets 练习。我有一个 NodeJS 脚本,它监听 WebSocket,接收文件名,打开文件,然后通过 WebSocket 将文件的内容发送回客户端。
代码如下:
var websocket_server = require('ws').Server;
var server = new websocket_server({port: 1234});
var fs = require('fs');
server.on('connection', function connection(socket)
{
socket.on('message', function request(file_name)
{
fs.readFile(file_name, function(error, data)
{
if(error)
throw error;
socket.send(data, {binary: true});
});
});
});
在客户端,我使用 WebSocket 加载图像并将其显示在页面中:
<!DOCTYPE html>
<html>
<head>
<title>My Little Project</title>
<script type = "text/javascript">
var ws = new WebSocket("ws://127.0.0.1:1234");
ws.binarytype = "blob";
ws.onmessage = function(event)
{
var img = document.createElement("img");
img.src = (window.URL || window.webkitURL).createObjectURL(event.data);
document.body.appendChild(img);
}
ws.onopen = function(event)
{
ws.send("image1.jpg")
}
</script>
</head>
<body>
</body>
</html>
现在,这个例子运行良好,我很高兴。让我难过的是,我现在想向服务器请求多张图片,然后对每张图片做一些处理。
我知道我可以通过执行以下操作来序列化我的所有请求:
ws.onmessage = function(event)
{
// Do something with image1.jpg
ws.onmessage = function(event)
{
// Do something with image2.jpg
// And so on
}
ws.send("image2.jpg");
};
ws.send("image1.jpg");
但这是串行的,会增加开销等等。我想得到的是这样的:
ws.send("image1.jpg", function(event)
{
// Do something with image1.jpg
});
ws.send("image2.jpg", function(event)
{
// Do something with image2.jpg
});
// And so on
我不知道如何在客户端和服务器上执行此操作,因此非常感谢任何帮助。
最佳答案
你应该使用库 websockets-callback
这正是你想要的。
这是演示中包含的部分代码:
function onTestProgressClick(){
var milliseconds = document.getElementById("callbackDelay").value;
//magic starts here
wsc.send({cmd: 'progress'},
function(response){
document.getElementById("ws_response").innerHTML = 'Progress test completed!';
},
function(response){
document.getElementById("progressBar").value = response.progress;
}
)
}
关于javascript - 回复消息的 WebSocket 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093847/