我有一个快速应用程序,它打开了我的前端React应用程序的套接字连接。
每当有人使用json数据向我的服务器发送post请求但socket.emit没有在a.post回调中触发时,我想向连接的套接字发出一个事件。但是io.sockets.emit工作正常但在这种情况下对我没用。
这失败了:
io.on('connection', (socket) => {
app.post('/event', (req, res) => {
socket.emit('someevent', req.body);
res.sendStatus(200);
}
}
但这传递了:
io.on('connection', (socket) => {
app.post('/event', (req, res) => {
io.sockets.emit('someevent', req.body);
res.sendStatus(200);
}
}
答案 0 :(得分:2)
SLaks的评论是正确的,但它无法解决我的问题。
我最终做的是:
public class MyAppWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String str=new String(url);
if(str.endsWith("comx")){
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Uri videoUri = Uri.parse(url.replace("?comx", ""));
intent.setClassName("com.mxtech.videoplayer.ad","com.mxtech.videoplayer.ad.ActivityScreen");
intent.setDataAndType(videoUri, "application/x-mpegURL");
intent.putExtra("secure_uri", true);
intent.putExtra("title", "Kung Fury");
intent.setPackage("com.mxtech.videoplayer.ad");
view.getContext().startActivity(intent);
//view.goBack();
return true;
}
else {
if(str.endsWith("covlc")){
Uri uri = Uri.parse(url.replace("?covlc", ""));
int vlcRequestCode = 42;
Intent vlcIntent = new Intent(Intent.ACTION_VIEW);
vlcIntent.setComponent(new ComponentName("org.videolan.vlc", "org.videolan.vlc.gui.video.VideoPlayerActivity"));
vlcIntent.setDataAndType(uri, "video/*");
vlcIntent.putExtra("title", "Kung Fury");
vlcIntent.putExtra("from_start", false);
vlcIntent.putExtra("subtitles_location", "/sdcard/Movies/Fifty-Fifty.srt");
view.getContext().startActivityForResult(vlcIntent, vlcRequestCode);
return true;
}
else {
//Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
//view.getContext().startActivity(intent);
return false;
}
}
}
}
的帖子请求中,我添加了一个包含套接字连接ID的隐藏输入字段。然后在我的/event
路由处理程序中,我做了:
/event
这是有效的,因为默认情况下,每个套接字连接都会连接一个用socket-id标识的房间,并且可以使用app.post('/event', function(req, res) {
io.sockets.in(req.body.socketId).emit('someevent', req.body);
res.sendStatus(200);
});
对象自己将消息发送到房间(无需从io
获取套接字对象