0
我想用js + primus羽毛來設置websocket:https://docs.feathersjs.com/real-time/primus.html。 但我不知道如何從服務器端的primus得到spark實例。以下是我的服務器代碼:如何使用feathersjs-primus來設置websocket連接
class SocketService {
create(data, params, callback){
...
}
}
module.exports = function(){
const app = this
let ss = new SocketService()
app.use('socket-shell', ss);
}
在上面的代碼中,服務器可以從create()方法中的客戶端獲取消息。但是,我怎麼能從primus中得到spark實例?我想用spark.write
方法將消息發送回客戶端。
下面是配置羽毛服務的服務器代碼:
app
.use(compress())
.options('*', cors())
.use(cors())
// .use(favicon(path.join(app.get('public'), 'favicon.ico')))
.use('/', serveStatic(app.get('public')))
.use(bodyParser.json())
.use(bodyParser.urlencoded({extended: true}))
.configure(hooks())
.configure(rest())
.configure(primus({
transformer: 'websockets',
timeout: false,
}, (primus) => {
app.use('socket-shell', function(socket, done){
// Exposing a request property to services and hooks
socket.request.feathers.referrer = socket.request.referrer;
done();
});
}))
.configure(services)
.configure(middleware);
下面的代碼是用來登記在服務器側的事件監聽器,但它不能從客戶端接收事件:
class SocketService {
constructor(options) {
this.events = [ 'someevent','serverevent' ]
}
setup(app) {
this.app = app;
let socketService = app.service('socket-shell')
socketService.addListener('serverevent', this.serverevent)
}
serverevent(msg){
console.log('serverevent', msg)
}
在客戶端代碼中,我用下面的代碼發送消息給服務器:
var primus = new Primus('http://localhost:3030');
var app = feathers()
.configure(feathers.hooks())
.configure(feathers.primus(primus));
var messageService = app.service('/socket-shell');
messageService.emit('serverevent', {msg:'this is client'})
什麼wr與上面的代碼?
我試過,但服務器無法接收來自客戶端的消息。我上面發佈了我的代碼。 –
目前這隻能將事件從服務器發送到客戶端。如果你想從客戶端發送信息到服務器,你必須使用'create','update','patch'或'remove'服務方法,這就是他們的用途。 – Daff