javascript - 为现有的 REST API 配置 Websocket - NodeJS、ReactJS
问题描述
我正在尝试在我的 React APP 和 REST API 之间建立持续连接。后端是用 JAVA 编写的。每当在数据库中添加新数据时,都应该将更新的数据发送到我的 react APP。对于这个过程,我正在使用 websockets。我已经在客户端(React APP)和 websocket.js(NodeJS)之间创建了连接
websocket.js
在 8000 端口运行
const webSocketsServerPort = 8000;
const webSocketServer = require('websocket').server;
const http = require('http');
const server = http.createServer();
server.listen(webSocketsServerPort);
console.log("Listening on Port 8000");
const wsServer = new webSocketServer({
httpServer: server
})
const clients = {};
// This code generates unique userid for everyuser.
const getUniqueID = () => {
const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
return s4() + s4() + '-' + s4();
};
wsServer.on('request', function(request) {
var userID = getUniqueID();
console.log((new Date()) + ' Recieved a new connection from origin ' + request.origin + '.');
const connection = request.accept(null, request.origin);
clients[userID] = connection;
console.log('connected - : ' + userID + ' in ' + Object.getOwnPropertyNames(clients))
});
我的反应组件
import { w3cwebsocket as W3CWebSocket } from "websocket";
const client = new W3CWebSocket('ws://127.0.0.1:8000');
componentDidMount() {
client.onopen = () => {
console.log('WebSocket Client Connected');
};
}
我的 React APP 正在运行的是localhost:3000
. websocket 连接已建立。
基本上我的数据列表 API 是我获取更新数据的地方,http//server.com/getDataList
并且通过如下所示的 websocket 连接似乎不起作用
const client = new W3CWebSocket('ws://server.com/getDataList:8000');
我的 React APP 上也有.ngnix.config
文件
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /share/nginx/html/;
index /share/nginx/html/index.html;
try_files $uri /index.html;
}
}
那么,当新数据使用 websockets 推送到数据库时,我如何通过现有的 REST API 获得我的 React APP 之间的持续连接以将更新的数据获取到我的 React APP,因为我只能在 localhost 上获得连接
解决方案
推荐阅读
- javascript - 如何修复父菜单中的大型列表项时侧边栏子菜单项溢出
- git - Github 中分支保护规则中的“或”条件
- javascript - 如何使用reduce将对象转换为对象数组?
- php - 需要合并具有相同键值对的单个数组元素
- c++ - C++ 使用 Map 中的参数调用函数
- javascript - 同一页面的不同实例的不同唯一令牌
- javascript - 测试一个使用 setTimeout 和 Jest 的函数:为什么这个测试失败了?
- ios - 如何将 TableViewCell 中的数据作为按钮执行?
- ios - 应用程序从一个 Apple 开发者帐户转移到另一个帐户的后果是什么?
- python-3.x - 使用 Python 和 pygerrit2 库从 Power BI Desktop 对 Gerrit 进行 API 调用