websocket 在单个URL中运行2个node js socket.io项目

vjrehmav  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(284)

我在亚马逊lightsail上有一个Nodejs服务器。我连接到它并为Nodejs做了必要的Apache配置。
我有2个Nodejs socket.io项目,我想从一个URL使用它们。
这些是Nextjs中的链接

  1. const [socket1, setSocket1] = useState<Socket | null>(null);
  2. const [socket2, setSocket2] = useState<Socket | null>(null);
  3. useEffect(() => {
  4. // first WebSocket
  5. const socketOne = io("https://....../", { path: "/ws", transports: ["websocket"] });
  6. setSocket1(socketOne);
  7. // second WebSocket
  8. const socketTwo = io("https://....../", { transports: ["websocket"] });
  9. setSocket2(socketTwo);
  10. // ComponentWillUnmount
  11. return () => {
  12. socketOne.disconnect();
  13. socketTwo.disconnect();
  14. };
  15. }, []); // only run once
  16. useEffect(() => {
  17. if (socket1) {
  18. socket1.on("connection", () => console.log("connected socket1"));
  19. }
  20. }, [socket1]);
  21. useEffect(() => {
  22. if (socket2) {
  23. socket2.on("connection", (data: any) => {
  24. console.log("Socket 2:", data);
  25. });
  26. }
  27. }, [socket2]);

字符串
server1应用程序

  1. const app = express();
  2. const httpServer = createServer(app);
  3. const io = new Server(httpServer, {transports: ["polling", "websocket",] , cors: { origin: ["https://clienturl.com/"] } });


server1应用程序

  1. const app = express();
  2. const httpServer = createServer(app);
  3. const io = new Server(httpServer, {transports: ["polling", "websocket",] , cors: { origin: ["https://clienturl.com/"] } });

qlzsbp2j

qlzsbp2j1#

你可以使用命名空间。基本上,你将在相同的URL上启动socket.io服务器,但不同的路由(socket.io称之为命名空间)。在这里你可以阅读更多:https://socket.io/docs/v4/namespaces/这个特定的视频也展示了命名空间的实现:https://www.youtube.com/watch?v=ZKEqqIO7n-k

相关问题