bidirectional request-response for socket.io
Of cource, Socket.IO's emit
and on
have request-response. This library adds some features.
- Promise interface
- Exception handling
timeout
disconnect
% npm install socket.io-request -save
request("method", data)
returnPromise
response("method", handler)
client
var ioreq = require("socket.io-request");
var io = require("socket.io-client")("http://localhost:3000");
io.on("connect", function(){
ioreq(io).request("toUpper", "hello world") // method, data
.then(function(res){
console.log(res); // get "HELLO WORLD"
})
.catch(function(err){
console.error(err.stack || err);
});
});
server
var ioreq = require("socket.io-request");
var io = require("socket.io")(3000);
io.on("connection", function(socket){ // new client
ioreq(socket).response("toUpper", function(req, res){ // method, handler
res(req.toUpperCase()); // return to client
});
});
server
var ioreq = require("socket.io-request");
var io = require("socket.io")(3000);
io.on("connection", function(socket){ // new client
ioreq(io).request("windowSize")
.then(function(res){
console.log(res); // get {height: 528, width: 924}
});
});
client (web browser)
var ioreq = require("socket.io-request");
var io = require("socket.io-client")("http://localhost:3000");
io.on("connect", function(){
ioreq(io).response("windowSize", function(req, res){
res({
height: window.innerHeight,
width: window.innerWidth
}); // return to server
});
});
res.error
returns error object to requester.
ioreq(io).response("foo", function(req, res){
if(typeof req !== "string") return res.error(new Error("request is not String"));
res("foo!" + req);
});
ioreq(io).request("foo", 123)
.then(function(res){
console.log(res);
})
.catch(function(err){
console.error(err); // => "[Error: request is not String]"
});
var options = {
event: "socket.io-request", // event name on socket.io
timeout: 90000 // request timeout (msec)
};
ioreq(io, options).request("foo");
Using async-await syntax, you can write like below.
async () => {
const res = await ioreq(io).request("hello");
};
in ./sample
directory.
% npm i
% npm run build
% npm test