- Notifications
You must be signed in to change notification settings - Fork20
socketio/socket.io-deno
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
An implementation of the Socket.IO protocol for Deno.
Table of content:
import{Server}from"https://deno.land/x/socket_io@0.2.1/mod.ts";constio=newServer();io.on("connection",(socket)=>{console.log(`socket${socket.id} connected`);socket.emit("hello","world");socket.on("disconnect",(reason)=>{console.log(`socket${socket.id} disconnected due to${reason}`);});});Deno.serve({handler:io.handler(),port:3000,});
And then run with:
$ deno run --allow-net index.tsLike theNode.js server, you can alsoprovide types for the events sent between the server and the clients:
interfaceServerToClientEvents{noArg:()=>void;basicEmit:(a:number,b:string,c:Buffer)=>void;withAck:(d:string,callback:(e:number)=>void)=>void;}interfaceClientToServerEvents{hello:()=>void;}interfaceInterServerEvents{ping:()=>void;}interfaceSocketData{user_id:string;}constio=newServer<ClientToServerEvents,ServerToClientEvents,InterServerEvents,SocketData>();
You need to use the.handle()method:
import{Server}from"https://deno.land/x/socket_io@0.2.0/mod.ts";import{Application}from"https://deno.land/x/oak@14.2.0/mod.ts";constapp=newApplication();app.use((ctx)=>{ctx.response.body="Hello World!";});constio=newServer();io.on("connection",(socket)=>{console.log(`socket${socket.id} connected`);socket.emit("hello","world");socket.on("disconnect",(reason)=>{console.log(`socket${socket.id} disconnected due to${reason}`);});});consthandler=io.handler(async(req)=>{returnawaitapp.handle(req)||newResponse(null,{status:404});});Deno.serve({ handler,port:3000,});
Default value:/socket.io/
It is the name of the path that is captured on the server side.
Caution! The server and the client values must match (unless you are using apath-rewriting proxy in between).
Example:
constio=newServer(httpServer,{path:"/my-custom-path/",});
Default value:45000
The number of ms before disconnecting a client that has not successfully joineda namespace.
Default value:20000
This value is used in the heartbeat mechanism, which periodically checks if theconnection is still alive between the server and the client.
The server sends a ping, and if the client does not answer with a pong withinpingTimeout ms, the server considers that the connection is closed.
Similarly, if the client does not receive a ping from the server withinpingInterval + pingTimeout ms, the client also considers that the connectionis closed.
Default value:25000
SeepingTimeout for more explanation.
Default value:10000
This is the delay in milliseconds before an uncompleted transport upgrade iscancelled.
Default value:1e6 (1 MB)
This defines how many bytes a single message can be, before closing the socket.You may increase or decrease this value depending on your needs.
Default value:-
A function that receives a given handshake or upgrade request as its firstparameter, and can decide whether to continue or not.
Example:
constio=newServer({allowRequest:(req,connInfo)=>{returnPromise.reject("thou shall not pass");},});
Default value:-
A set of options related toCross-Origin Resource Sharing(CORS).
Example:
constio=newServer({cors:{origin:["https://example.com"],allowedHeaders:["my-header"],credentials:true,},});
Default value:-
A function that allows to edit the response headers of the handshake request.
Example:
constio=newServer({editHandshakeHeaders:(responseHeaders,req,connInfo)=>{responseHeaders.set("set-cookie","sid=1234");},});
Default value:-
A function that allows to edit the response headers of all requests.
Example:
constio=newServer({editResponseHeaders:(responseHeaders,req,connInfo)=>{responseHeaders.set("my-header","abcd");},});
The library relies on the standardlog module, so you can display the internallogs of the Socket.IO server with:
import*aslogfrom"https://deno.land/std@0.166.0/log/mod.ts";awaitlog.setup({handlers:{console:newlog.handlers.ConsoleHandler("DEBUG"),},loggers:{"socket.io":{level:"DEBUG",handlers:["console"],},"engine.io":{level:"DEBUG",handlers:["console"],},},});
Custom adapters can be used to broadcast packets between several Socket.IOservers.
Documentation:https://socket.io/docs/v4/redis-adapter/
import{createRedisAdapter,createRedisClient,Server,}from"https://deno.land/x/socket_io@0.2.0/mod.ts";const[pubClient,subClient]=awaitPromise.all([createRedisClient({hostname:"localhost",}),createRedisClient({hostname:"localhost",}),]);constio=newServer({adapter:createRedisAdapter(pubClient,subClient),});Deno.serve({handler:io.handler(),port:3000,});
About
Socket.IO server for Deno
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.