📅  最后修改于: 2023-12-03 14:47:43.508000             🧑  作者: Mango
Streami Node.js是一个用于创建实时Web应用程序的JavaScript框架。它基于Node.js和WebSocket协议,可以在客户端和服务器之间创建轻量级和高效的双向通信。
使用npm安装:
npm install streami-node
const streami = require('streami-node');
const http = require('http');
const server = http.createServer();
const io = streami(server);
io.on('connection', (socket) => {
console.log('A user connected');
// 发送消息
socket.send('Hello, streami!');
// 监听消息
socket.on('message', (data) => {
console.log(`Received message: ${data}`);
});
// 断开连接
socket.on('disconnect', () => {
console.log('A user disconnected');
});
});
server.listen(3000, () => {
console.log('Server started');
});
<!DOCTYPE html>
<html>
<head>
<title>Streami Node.js Client</title>
<script src="https://cdn.jsdelivr.net/npm/socket.io-client/dist/socket.io.js"></script>
<script>
const socket = io('http://localhost:3000');
// 发送消息
socket.send('Hello, streami!');
// 监听消息
socket.on('message', (data) => {
console.log(`Received message: ${data}`);
});
// 断开连接
socket.on('disconnect', () => {
console.log('Disconnected from server');
});
</script>
</head>
<body>
</body>
</html>
streami(server[, options])
server
<http.Server> | <https.Server> | <number> | <object>:可选,可以是http/https服务器、端口号或选项对象。options
<object>:可选,选项对象,具体包括:path
<string>:指定WebSocket路径,默认为/socket.io
。serveClient
<boolean>:是否在响应请求时提供socket.io客户端文件,默认为true
。adapter
<Adapter>:指定适配器,默认为内存适配器。origins
<string>:指定允许访问的来源地址,默认为*:*
。const streami = require('streami-node');
const http = require('http');
const server = http.createServer();
const io = streami(server, {
path: '/socket-io',
serveClient: false,
adapter: 'memory',
origins: 'http://localhost:* https://localhost:*'
});
io.on(event, listener)
event
<string>:事件名称,如:connection
、disconnect
、message
等。listener
<(...args: any[]) => void>:事件回调函数。io.on('connection', (socket) => {
console.log(`A user connected: ${socket.id}`);
socket.on('message', (data) => {
console.log(`Received message: ${data}`);
socket.send('Hello, client!');
});
socket.on('disconnect', (reason) => {
console.log(`A user disconnected: ${socket.id}, reason: ${reason}`);
});
});
io.emit(event[, ...args])
向所有客户端发送事件和数据。
event
<string>:事件名称。args
<any>:数据,可以是任意类型。io.emit('new_message', 'Hello, all!');
io.in(room).emit(event[, ...args])
向指定房间的客户端发送事件和数据。
room
<string>:房间名称。event
<string>:事件名称。args
<any>:数据,可以是任意类型。io.in('room1').emit('message', 'Hello, room1!');
socket.join(room)
加入指定房间。
room
<string>:房间名称。socket.join('room1');
socket.leave(room)
离开指定房间。
room
<string>:房间名称。socket.leave('room1');
socket.send(data[, callback])
向当前客户端发送数据。
data
<any>:数据,可以是任意类型。callback
<() => void>:可选,发送成功后的回调函数。socket.send('Hello, client!');
socket.emit(event[, ...args])
向当前客户端发送事件和数据。
event
<string>:事件名称。args
<any>:数据,可以是任意类型。socket.emit('message', 'Hello, client!');
socket.join(room[, callback])
加入指定房间。
room
<string>:房间名称。callback
<(err?: any) => void>:可选,加入成功后的回调函数。socket.join('room1', (err) => {
if (err) {
console.error(err);
} else {
console.log('Joined room1');
}
});
socket.leave(room[, callback])
离开指定房间。
room
<string>:房间名称。callback
<() => void>:可选,离开成功后的回调函数。socket.leave('room1', () => {
console.log('Left room1');
});
socket.disconnect([close])
断开连接。
close
<boolean>:可选,是否关闭底层套接字。socket.disconnect(true);
io( [url][, options])
url
<string>:可选,Socket.IO服务地址,默认为当前页面地址。options
<Object>:可选,选项对象,具体包括:path
<string>:指定WebSocket路径,默认为/socket.io
。query
<string>:指定查询参数,会附加到url和path之间。forceNew
<boolean>:是否创建新连接,默认为false
。reconnection
<boolean>:是否自动重连接,默认为true
。reconnectionAttempts
<number>:自动重连接尝试次数,默认为Infinity
。reconnectionDelay
<number>:自动重连接延迟时间(毫秒),默认为1000
。reconnectionDelayMax
<number>:自动重连接最大延迟时间(毫秒),默认为5000
。randomizationFactor
<number>:自动重连接延迟随机因子(介于0和1之间),默认为0.5
。timeout
<number>:连接超时时间(毫秒),默认为20000
。transport
<string>:使用的传输类型,默认为["polling", "websocket"]
。autoConnect
<boolean>:是否自动连接,当处于离线状态时禁用自动连接,默认为true
。query
<string> | <Object>:附加查询参数,可以是字符串或对象。extraHeaders
<Object>:附加HTTP头信息。const socket = io('http://localhost:3000', {
path: '/socket-io',
reconnection: true,
reconnectionDelay: 1000,
timeout: 20000
});
socket.on(event, listener)
event
<string>:事件名称,如:connect
、disconnect
、message
等。listener
<(...args: any[]) => void>:事件回调函数。socket.on('connect', () => {
console.log(`Connected: ${socket.id}`);
});
socket.on('message', (data) => {
console.log(`Received message: ${data}`);
});
socket.on('disconnect', (reason) => {
console.log(`Disconnected: reason: ${reason}`);
});
socket.emit(event[, ...args])
向服务器端发送事件和数据。
event
<string>:事件名称。args
<any>:数据,可以是任意类型。socket.emit('message', 'Hello, server!');
socket.send(data[, callback])
向服务器端发送数据。
data
<any>:数据,可以是任意类型。callback
<() => void>:可选,发送成功后的回调函数。socket.send('Hello, server!');
socket.join(room[, callback])
加入指定房间。
room
<string>:房间名称。callback
<(err?: any) => void>:可选,加入成功后的回调函数。socket.join('room1', (err) => {
if (err) {
console.error(err);
} else {
console.log('Joined room1');
}
});
socket.leave(room[, callback])
离开指定房间。
room
<string>:房间名称。callback
<() => void>:可选,离开成功后的回调函数。socket.leave('room1', () => {
console.log('Left room1');
});
socket.disconnect()
断开连接。
socket.disconnect();
使用内存存储数据,可以在单个进程中共享数据。
const streami = require('streami-node');
const http = require('http');
const server = http.createServer();
const io = streami(server, {
adapter: 'memory'
});
使用Redis数据库存储数据,可以在多个进程或服务器间共享数据。
const streami = require('streami-node');
const http = require('http');
const redis = require('socket.io-redis');
const server = http.createServer();
const io = streami(server, {
adapter: redis({
host: 'localhost',
port: 6379
})
});