技术栈(nodejs express)
目前需要写一个后台接口供别人调用(http)
后台需要与前端建立websocket双向通信
问题: 后台接口获取到调用参数后,如何通过websocket传到前端,求技术路线
后端nodejs添加 websocket 库
npm install websocket
写后端代码,示例
const http = require('http');
const WebSocketServer = require('websocket').server;
const URL = require('url').URL;
const fs = require('fs');
let http_server = http.createServer((req, res)=>{
let url = new URL("http://127.0.0.1"+req.url);
if(url.pathname == '/' || url.pathname == '/index.html' ){
let data = fs.readFileSync('index.html');
res.end(data);
}else if(url.pathname == '/send'){
let data = url.searchParams.get('data');
ws_server.broadcast(data);
res.end();
}else{
res.statusCode = 404;
res.end();
}
});
let ws_server = new WebSocketServer({
httpServer: http_server
});
ws_server.on('request', (req)=>{
req.accept();
});
http_server.listen(8080);
写前端代码,示例
<script>
let ws = null;
let stat = "";
function init(){
ws = new WebSocket('ws://127.0.0.1:8080');
ws.onmessage = function(msg){
console.log(msg);
stat += ('\nrecv' + msg.data);
view.innerHTML = stat;
}
}
function send(){
let data = Math.floor(Math.random() * 1000)+"";
stat += ('\nsend' + data);
view.innerHTML = stat;
fetch("http://127.0.0.1:8080/send?data=" + data);
}
</script>
<body onload="init()">
<button onclick="send()">SEND</button>
<pre id="view"></pre>
</body>
HTTP的报文可以通过下面这样获取,获取的内容主要是由三次握手、请求报文、相应内容、结束信息组成。
curl -v http://127.0.0.1:1337
运行图: