如何使用 ES6 语法在 Node.js 中使用 socket.io

Ham*_*Ali 3 javascript websocket node.js socket.io ecmascript-6

我想使用 oop 架构和 javascript ES6 语法制作一个聊天应用程序。我不知道如何初始化socket.io。我没有找到任何帮助。

这是我的代码。

import express from 'express';
import http from 'http';
import config from 'config';
import SocketIO from 'socket.io'

const app = express();
const port = config.PORT;
app.set('port', port);
const server = http.createServer(app);
var io = SocketIO(server);
io.on('connection', socket => {
    console.log("Socket connected");
    
});

server.listen(port, () => console.log(`API running on localhost:${port}`));
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用套接字客户端工具连接套接字,它显示连接超时。

小智 7

在我的情况下使用import socketIo from 'socket.io';不起作用。

我使用以下方法解决了这个问题,并将套接字连接到端口 5000 上已有的 Node Express 服务器。

import cors from 'cors';
import { createServer } from 'http';
import { Server } from 'socket.io'; //replaces (import socketIo from 'socket.io')

const httpServer = createServer(app);
const io = new Server(httpServer, { cors: { origin: '*' } });


io.on('connection', (socket) => {
  console.log('Connection established');
 
getApiAndEmit(socket);
  socket.on('disconnect', () => {
    console.log('Disconnected');
  });
});


const getApiAndEmit = (socket) => {
  const response = 'response you need';
  socket.emit('FromAPI', response);
};

app.set('port', process.env.PORT || 5000);

httpServer.listen(app.get('port'), function () {
  var port = httpServer.address().port;
  console.log('Running on : ', port);
});
Run Code Online (Sandbox Code Playgroud)

在客户端中,我连接如下:

import React,{ useState, useEffect } from 'react';
import socketIOClient from 'socket.io-client';

const ENDPOINT = 'http://127.0.0.1:5000'; //endpoint port 5000

const MyComponent = () => {

  const [response, setResponse] = useState('');

  useEffect(() => {
    const socket = socketIOClient(ENDPOINT);
    console.log(socket);
    console.log(ENDPOINT);
    socket.on('FromAPI', (data) => {
      setResponse(data);
    });

  }, []);

     return <p>{response}</p>

}

export default MyComponent;
Run Code Online (Sandbox Code Playgroud)