Very basic server:
import { createServer } from "http";
import { ChatMessage } from "@chat/types";
import { WebSocketServer } from "ws";
function onSocketError(err) {
console.error(err);
}
const server = createServer();
const wss = new WebSocketServer({ noServer: true });
wss.on("connection", (ws, request) => {
console.log("New connection to websocket");
ws.on("error", console.error);
ws.on("message", (data) => {
const msg: ChatMessage = JSON.parse(data.toString());
console.log(`Received message ${msg} from user ${msg.fromId}`);
wss.clients.forEach((client) => {
client.send(JSON.stringify(msg));
});
});
});
server.on("upgrade", function upgrade(request, socket, head) {
console.log("Upgrading to websocket");
socket.on("error", onSocketError);
socket.removeListener("error", onSocketError);
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit("connection", ws, request);
});
});
server.on("listening", () => {
console.log("Listening on port 8080");
});
server.listen(8080);
I connect in the client with
const newWS = new WebSocket("ws://ws.mydomain.com:8080");
newWS.onopen = () => {
console.log("Connected to chat server");
};
newWS.onerror = (err) => console.error(err);
newWS.onclose = () => {
console.log("Disconnected from chat server");
};
There is no error message but also no console.log() that a connection has been established. Neither on the client nor on the server.