我的锻炼非常复杂,但到目前为止我做得很好。我剩下要做的就是添加WebSockets。
这是一个涉及两个主题的简单投票应用程序,但是我必须使用特定技术才能在特定部分上使用。另外,一切都在Docker中运行。
这是我的应用程序的体系结构:
当前,该应用程序可以处理HTTP请求,但是我必须以某种方式实现WebSockets。我知道我必须链接Angular,但是另一个是什么?
在这种情况下,我将如何实现WebSockets?
答案 0 :(得分:2)
Websocket与https有很多共同点。实际上,它们以https连接开始生活,然后升级到持久的websocket连接。
因此,您的客户端(浏览器中的Javascript)使用WebSocket object的实例启动连接。然后,它可以与服务器之间收发消息。您的浏览器代码可能如下所示。它启动连接。连接打开时,它将发送一条消息。
const ws = new WebSocket("ws://www.example.com:8090/socketserver");
ws.onmessage = function (event) {
console.log ('incoming', event.data);
}
ws.onopen = function (event) {
ws.send ("Hey there server!");
}
在服务器(nodejs)端,您需要安装Websocket服务器以接受客户端连接。您可以使用npm's ws package进行此操作。 (还有其他软件包,但我知道这是可行的。)
您的最低可行的ws服务器代码也非常简单。
const WebSocket = require('ws');
...
const wss = new WebSocket.Server({ port: 8090 });
wss.on('connection', function connection(ws) {
/* Here an incoming websocket connection is accepted
* You must keep the ws object in scope for the lifetime
* of the connection */
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
/* respond to ping keepalives from client */
ws.on('ping', function ping() {
ws.pong();
}
/* send messages as needed */
ws.send('hey there client!');
});
请注意:浏览器安全性不允许您混合使用从浏览器到服务器的连接模式(https / http)。因此,如果前端的其余部分通过https:提供服务,则需要使用wss:而不是ws:。在服务器端安装起来有点困难,但仍以相同的方式工作。
还要注意,我没有给出任何错误或超时处理。生产代码需要这些东西。