首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实时使用vue-socket.io + vuex?

如何实时使用vue-socket.io + vuex?
EN

Stack Overflow用户
提问于 2020-03-30 16:46:03
回答 2查看 3.3K关注 0票数 0

我有一个提要,用户可以在其中投票帖子

服务器>节点,快捷,socket.io v2.3.0

服务器> app.js

代码语言:javascript
复制
client.on('connection', socket =>{
    socket.emit('success', {message: 'Server Accecpting Connections'});
    // CLients connected
        client.clients((error, clients) => {
            if (error) throw error;
            console.log(`<----- users connected ->`)
            console.log(clients);
            console.log(' ');
        })
    // Disconnected user
    socket.on('disconnect',() =>{
        console.log(`user disconnected  ---> ${socket.id}`);
        console.log(' ');
    })            
})

服务器> votePost.js

代码语言:javascript
复制
    const votePost = function(client){
        client.on('connection', socket =>{
            socket.on('votePost',async post =>{
                try {
    // logic
    socket.emit('postVoted', {updatedPost})
    }
                } catch (error) {
                    console.log(error);
                }
module.exports = votePost

Client > vue CLI,vuex,socket.io v2.3.0,vue-socket.io v3.0.7

Client > main.js“配置:”

代码语言:javascript
复制
import VueSocketIO from 'vue-socket.io'
import SocketIO from "socket.io-client"
  Vue.use(new VueSocketIO({
    debug: true,
    connection: SocketIO('http://localhost:3000'), //options object is Optional
    vuex: {
      store,
      actionPrefix: "SOCKET_",
      mutationPrefix: "SOCKET_"
    }
  })
  );

post vuex模块中测试到服务器的连接从服务器(所有连接的套接字参见此消息)接收成功的消息

代码语言:javascript
复制
"SOCKET_success"(state, server) {
    console.log(server.message);
},

从组件向服务器发送数据的内部方法:

代码语言:javascript
复制
createVote(data){
    const post = {SOMEPOSTDATA}
    this.$socket.emit('votePost', post)
},

接收从服务器创建的数据:vuex post模块(动作内部)

代码语言:javascript
复制
"SOCKET_updatedPost"({commit,state}, server) {
    state.post = server.updatedPost
},

此时,im从服务器接收更新的帖子,并在我看到更新的地方更新我的状态。但是--我需要每次使用--也可以看到更新后的帖子

为什么会发生这种事?我遗漏了什么?,当有人更新时,所有的用户都会看到它的变化。

EN

回答 2

Stack Overflow用户

发布于 2020-03-30 19:02:14

目前还不清楚您想要做什么,但是如果我理解正确的话,您希望在一个套接字触发“创建”事件之后,将“创建”事件发送到所有套接字。如果是的话:

代码语言:javascript
复制
 socket.on('create',(name)=> {
        io.of('/').emit('created', {name})            
    })

问题是,由于某种原因,您在某个"create“函数中注册了"connection”事件,这似乎没有多大意义。您的io.on('connection')需要在某个高级模块中注册一次,并且在其范围内您需要注册连接套接字的所有特定事件。我没有你的完整代码,所以我不能说,但这是你需要看的东西。

票数 1
EN

Stack Overflow用户

发布于 2020-03-30 20:18:21

我自己找到了答案。问题是我用了

代码语言:javascript
复制
**socket.emit('postVoted', {updatedPost})**

其中,socket.emit意味着更新的数据开始于创建该操作的用户,但将该事件更改为:

代码语言:javascript
复制
**io.sockets.emit**

这样,每次使用都可以获得更新的数据。

显然不是套接字方面的专家,有关于套接字的好课程吗?谢谢

注意:我对使用2 .on('connection')方法有疑问,有关于如何实现这个模块的建议吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60935368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档