使用HTTP實現了一個類似websocket的協議:httpsocket

jopen 10年前發布 | 31K 次閱讀 WebSocket 開發 httpsocket
類似于websocket API的一個實現,采用HTTP的方式。可用于瀏覽器和Node環境。
var http = require('http')
var through = require('through2')
var url = require('url')
var Router = require("routes-router")
var HTTPSocket = require('./')
var HTTPSocketBackend = require('./backend')
var debug = require('debug')('HTTPSocketTestServer')
var backends = {}
var router = Router()
var server = http.createServer(router)
router.addRoute("/:id/push", function (req, res, opts) {
debug(req.method, req.url)
var backend = backends[opts.params.id]
if (!backend) backend = backends[opts.params.id] = HTTPSocketBackend()
backend.post(req, res)
})
router.addRoute("/:id/events", function (req, res, opts) {
debug(req.method, req.url)
var backend = backends[opts.params.id]
if (!backend) backend = backends[opts.params.id] = HTTPSocketBackend()
backend.events.pipe(res, {end: false})
req.on('close', function() {
backend.events.destroy()
res.end()
})
})
router.addRoute("/:id/get/:object", function (req, res, opts) {
debug(req.method, req.url)
var backend = backends[opts.params.id]
if (!backend) return res.end('no backend for that id')
backend.get(opts.params.object, res)
})
server.listen(8080, function listening() {
var client = new HTTPSocket('http://localhost:8080')
console.log('socket send', ["hello"])
client.write(new Buffer('hello'))
console.log('socket send', ["world"])
client.write(new Buffer('world'))
var pending = 2
client.pipe(through(function(chunk, enc, next) {
console.log('socket receive', [chunk.toString()])
next()
if (!--pending) {
client.end()
server.close()
}
}))
})

項目主頁:http://www.baiduhome.net/lib/view/home/1416982642987

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!