WebSocket回调以答复消息
WebSocket callback to answer to message
我正在使用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;
}
)
}
为什么不将图像作为json编码的数组发送,然后在服务器端进行处理?我还没有运行这个代码,但它应该可以工作。
let images = [
"image1.jpg",
"image2.jpg",
];
ws.send(JSON.stringify(images), function(event)
{
// Do something with images
});
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- 使用回调在可用时传递消息
- 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- 如果失败,角度回调 API 将添加错误消息
- 如何获取此回调的 json 消息
- ExtJS 6 访问消息属性在存储同步的回调
- 由于某种原因,Pubnub javascript 没有收到回调或消息
- "无法读取属性'消息'未定义的“;在WebSQL错误回调中
- 消息回调不经常返回一个值-Chrome扩展
- WebSocket回调以答复消息
- Ajax回调->消息从PHP通过JSON到JS并输出到DIV
- 消息管理器API sendAsyncMessage回调
- 如何在向NaCl (Chrome Native Client)发送消息后实现回调
- 简单的聊天程序在流星.如何在新消息传入时调用回调函数?
- 如何在等待多个异步JSONP回调时显示加载消息