In general, you can lauch this service directly after pulling this respository and installing packages.
If you have owned an existing express server, You might as well refer to instructions as follows:
- Install packages from package.json
$ npm i --save
- You can install ws package if you have owned an existing express web server
$ npm i ws --save
- Launch server.js
# Launch your server
$ node server.js # You will see "Listening to port {portNumber}"
- Launch client.js
# Try to send a message to server
$ node client.js
Copy&paste/move chat.ejs file to views folder.
Replace rendering page name "index" to "chat".
router.get('/', function(req, res, next) {
res.render('chat', {
title: 'Websocket chatroom exhibition with [Express web server]'
});
});
# At about 49 lines
# Please set your domain name or localhost
.
.
wss = new WebSocket('ws://{domain-name}:5566');
- Add package requirement
const WebSocket = require('ws');
- Add code for server side
/**
* 自訂 web socket server
*/
const wss = new WebSocket.Server({server: server});
//伺服器傳送資料用的物件
let objServer = {name: 'SERVER', msg: null};
wss.on('connection', (ws) => {
//始初訊息
objServer.msg = '聊天室已開啟!!';
ws.send( JSON.stringify(objServer) );
//接收訊息的事件
ws.on('message', function (obj) {
//將字串轉為物件來存取屬性
obj = JSON.parse(obj);
console.log('%s 說: %s', obj.name, obj.msg);
//廣播資訊給線上所有人
wss.clients.forEach((client) => {
// if(client !== ws && client.readyState === WebSocket.OPEN) { //只廣播給其他人,不傳給自己
if (client.readyState === WebSocket.OPEN) { //廣播給自己和其他人
client.send( JSON.stringify(obj) );
}
});
});
});
$ node bin/www
- You might as well claim an object variable for sending data.
let objClient = {
name: 'your-name',
msg: 'your-message'
};
- You have to convert object to string for passing variable.
# Send an object to server/client
ws.send( JSON.stringify( objClient ) );