在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:francisrstokes/hexnut开源软件地址:https://github.com/francisrstokes/hexnut开源编程语言:JavaScript 100.0%开源软件介绍:HexnutHexnut is a middleware based, express/koa like framework for web sockets. For an introduction, and API documentation, please check out the docs. Middleware
Client sideYou can use hexnut as a client in the frontend with ExamplesTrivial Exampleconst Hexnut = require('hexnut');
const errorService = require(/* some error logging service */);
const app = new Hexnut({ port: 8080 });
app.onerror = async (err, ctx) => {
await errorService(err);
ctx.send(`Error! ${err.message}`);
};
app.use(ctx => {
if (ctx.isConnection) {
ctx.state = { count: 0 };
return ctx.send('Hello, and welcome to the socket!');
}
ctx.state.count++;
ctx.send(`Message No. ${ctx.state.count}: ${ctx.message}`);
});
app.start(); Parsing JSON automaticallyconst Hexnut = require('hexnut');
const bodyParser = require('hexnut-bodyparser');
const app = new Hexnut({ port: 8080 });
app.use(bodyParser.json());
app.use(ctx => {
if (ctx.isConnection) {
ctx.state = { count: 0 };
return ctx.send('Hello, and welcome to the socket!');
}
if (ctx.message.type) {
ctx.state.count++;
ctx.send(`Message No. ${ctx.state.count}: ${ctx.message.type}`);
} else {
ctx.send(`Invalid message format, expecting JSON with a "type" key`);
}
});
app.start(); Handling messages by typeconst Hexnut = require('hexnut');
const handle = require('hexnut-handle');
const app = new Hexnut({ port: 8080 });
app.use(handle.connect(ctx => {
ctx.count = 0;
}));
app.use(handle.matchMessage(
msg => msg === 'incCount',
ctx => ctx.count++
));
app.use(handle.matchMessage(
msg => msg === 'decCount',
ctx => ctx.count--
));
app.use(handle.matchMessage(
msg => msg === 'getCount',
ctx => ctx.send(ctx.count)
));
app.start(); Sequencing Interactionsconst Hexnut = require('hexnut');
const bodyParser = require('hexnut-bodyparser');
const sequence = require('hexnut-sequence');
const app = new Hexnut({ port: 8080 });
app.use(bodyParser.json());
// This sequence happens when the user connects
app.use(sequence.onConnect(function* (ctx) {
ctx.send(`Welcome, ${ctx.ip}`);
const name = yield sequence.getMessage();
ctx.clientName = name;
return;
}));
app.use(sequence.interruptible(function* (ctx) {
// In order to use this sequence, we assert that we must have a clientName on the ctx
yield sequence.assert(() => 'clientName' in ctx);
// We first expect a message with type == greeting
const greeting = yield sequence.matchMessage(msg => msg.type === 'greeting');
// Then a message that has type == timeOfDay
const timeOfDay = yield sequence.matchMessage(msg => msg.type === 'timeOfDay');
return ctx
.send(`And a ${greeting.value} to you too, ${ctx.clientName} on this fine ${timeOfDay.value}`);
}));
app.start(); Integrating with rxjsconst Hexnut = require('hexnut');
const { withObservable, filterMessages } = require('hexnut-with-observable');
const { tap, filter } = require('rxjs/operators');
const { pipe } = require('rxjs');
const app = new Hexnut({ port: 8181 });
app.use(withObservable(pipe(
// Do setup operations here...
tap(({ctx}) => {
if (ctx.isConnection) {
console.log(`[${ctx.ip}] Connection started`);
}
}),
// Filter to only messages
filterMessages(msg => msg !== 'skip'),
// Process messages
tap(({ctx, next}) => {
ctx.send(`You sent: ${ctx.message}`);
})
)));
app.start(); |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论