Experess и socket.io могут находиться на одном и том же порту.
const express = require('express')
const app = express()
const http = require('http').createServer(app)
const io = require('socket.io')(http)
app.use(
express.static(__dirname + '/client')
)
io.on('connection', function(socket){
console.log('Socket Connected');
socket.emit('message', 'Hello Socket');
socket.on('message', function (msg) {
console.log(msg);
});
})
http.listen(8080, () => console.log('Server is running @ localhost:8080')) //port
Я никогда не использовал nginx и не обслуживал приложение nodejs с сервером, отличным от самого nodejs.Я предполагаю, что у вас есть веб-приложение, которое вы обслуживаете через nginx?
Чтобы использовать сокет на другом порту, вы должны создать другой сервер nodejs через http
, а затем использовать cors
, чтобы позволить им соединиться.Мне сказали, что использование cors (Cross-Origin Resource Sharing) может быть опасным.Самое простое и безопасное для этого - держать ваше приложение под одним портом (сервером).
Socket.io заботится о настройке веб-сокета и обновлении соединения.Если вам нужно справиться с этим по-своему, я бы порекомендовал что-то вроде faye-websocket , но socket.io многое из этого абстрагирует.
Вы узнаете больше о socket.io с помощью nodejshttp серверы здесь .
На стороне клиента или на вашей веб-странице, например index.html
...
<!DOCTYPE html>
<html>
<head>
<title>Socket.io Test</title>
<script src="socket.io/socket.io.js"></script>
</head>
<body>
<!-- HTML -->
<script>
var socket = io();
socket.on('message', function (msg) {
console.log(msg);
socket.emit('message', 'Back at you');
});
</script>
</body>
</html>
, для запуска этого кода создайте новую папку socket.io_test
, а затем внутри создайте файл с именем app.js
и еще одна папка client
с файлом index.html
.Скопируйте первый фрагмент кода в app.js
, а второй в index.html
.cd
в корневую папку и запустите npm init -y
, затем npm i -s express socket.io
и, наконец, node app.js
и укажите свой браузер на localhost:8080
.
Надеюсь, это поможет