Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Socket.IO server for Deno

License

NotificationsYou must be signed in to change notification settings

socketio/socket.io-deno

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

An implementation of the Socket.IO protocol for Deno.

Table of content:

Usage

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.ts

Like 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>();

With oak

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,});

Options

path

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/",});

connectTimeout

Default value:45000

The number of ms before disconnecting a client that has not successfully joineda namespace.

pingTimeout

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.

pingInterval

Default value:25000

SeepingTimeout for more explanation.

upgradeTimeout

Default value:10000

This is the delay in milliseconds before an uncompleted transport upgrade iscancelled.

maxHttpBufferSize

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.

allowRequest

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");},});

cors

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,},});

editHandshakeHeaders

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");},});

editResponseHeaders

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");},});

Logs

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"],},},});

Adapters

Custom adapters can be used to broadcast packets between several Socket.IOservers.

Redis adapter

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,});

License

ISC

Contributors3

  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp