Reputation: 157
In my current project, I need to use a websocket server (using the ws
library) in my svelte-kit application. I have successfully set up the websocket server to run automatically with npm run dev
(in my vite.config.ts
). But, when I build the application and run npm run preview
, I don't see the console.log
s from my websocket server anymore. How can I fix this and get the server to just run in the prod environment?
vite.config.ts:
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import { web_socket_server } from './src/websocket/server';
export default defineConfig({
plugins: [sveltekit(), web_socket_server]
});
server.ts
import { WebSocket, WebSocketServer } from 'ws';
type Client = {
name: string;
socket: WebSocket;
should_disconnect: boolean;
};
const clients: Client[] = [];
let server;
// TODO: probably change the any
export const configureServer = (_: unknown) => {
console.log('[*] Creating websocket server...');
server = new WebSocketServer({
port: 6969
});
console.log('[*] Created websocket server: ' + server);
server.on('listening', () => {
console.log('[+] Server is now listening!');
});
server.on('close', () => {
console.log('[-] Shutting down the server!');
});
server.on('error', (error) => {
console.log('[-] An uncaught error has occured!');
console.error(error);
});
server.on('connection', (socket: WebSocket) => {
clients.push({ name: '', socket, should_disconnect: false });
socket.on('close', (code, reason) => handleSocketClose(socket, code, reason));
socket.on('error', (err) => handleSocketError(socket, err));
});
};
export const web_socket_server = {
name: 'webSocketServer',
configureServer
};
export default server;
function handleSocketClose(socket: WebSocket, code: number, reason: Buffer) {
const current_client = clients.find((client) => client.socket == socket);
if (!current_client) {
console.log('[-] Unregistered Socket disconnected!');
return;
}
clients.splice(clients.indexOf(current_client), 1);
if (!current_client.should_disconnect) {
console.log('[-] Client disconnected unexpectedly!');
return;
}
console.log('[-] Code: ' + code + ', reason: ' + reason.toString());
}
function handleSocketError(socket: WebSocket, err: Error) {
console.log('[-] Connection error!');
console.error(err);
const client = clients.find((client) => client.socket == socket);
if (client) {
client.should_disconnect = true;
}
}
function handleSocketMessage(socket: WebSocket, message: Buffer | ArrayBuffer | Buffer[]) {}
I tried to get it to run using the svelte.config.js
but that made me fiddle around with javascript and typescript interopt, until I found out it the properties on the config object I needed, don't exist anymore.
I checked the entire build
directory for files that contain strings from the vite.config.ts
but none of them contained any.
Upvotes: 0
Views: 344