websocket 实现 前端vue-socket.io 服务端 koa2(socket.io)

前端:(vue项目,main.js)

// The Vue build version to load with the `import` command

// (runtime-only or standalone) has been set in webpack.base.conf with an alias.

import Vue from ‘vue‘

import App from ‘./App‘

import router from ‘./router‘

// import VueNativeSock from ‘vue-native-websocket‘

// Vue.use(VueNativeSock, ‘ws://localhost:3000‘, {

// passToStoreHandler: function (eventName, event, next) {

// event.data = event.should_have_been_named_data

// next(eventName, event)

// }

// })

import VueSocketIO from ‘vue-socket.io‘

Vue.use(new VueSocketIO({

debug: true,

connection: ‘ws://localhost:8888/self‘,

forceNew: true,

// vuex: {

// store,

// actionPrefix: ‘SOCKET_‘,

// mutationPrefix: ‘SOCKET_‘

// },

options: { path: "" } //Optional options

}))

Vue.config.productionTip = false

/* eslint-disable no-new */

new Vue({

el: ‘#app‘,

router,

components: { App },

template: ‘<App/>‘

})

前端--在组件中使用:(HelloWorld.vue 组件)

<template>

<div class="hello">

<h1>{{ msg }}</h1>

<h2>Essential Links</h2>

</div>

</template>

<script>

export default {

name: "HelloWorld",

data() {

return {

msg: "Welcome to Your Vue.js App"

};

},

mounted() {

this.onsocket();

this.sockets.subscribe("client_event", data => {

console.log(data);

// this.msg = data.message;

});

},

sockets: {

connect: function() {

console.log("客户端检测到 socket connected------------");

},

server_event: function(data) {

console.log(

‘ 服务端定义的事件名字:"server_event" socket server. eg: io.emit("server_event", data)‘

);

console.log(data);

}

},

methods: {

onsocket() {

this.$socket.emit("client_event", { origin: "client" });

}

}

};

</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->

<style scoped>

h1,

h2 {

font-weight: normal;

}

ul {

list-style-type: none;

padding: 0;

}

li {

display: inline-block;

margin: 0 10px;

}

a {

color: #42b983;

}

</style>

----------------------------------------------------------------------------------------------------------------

服务端:(koa2项目,app.js)

const Koa = require(‘koa‘)

const app = new Koa()

const views = require(‘koa-views‘)

const json = require(‘koa-json‘)

const onerror = require(‘koa-onerror‘)

const bodyparser = require(‘koa-bodyparser‘)

const logger = require(‘koa-logger‘)

const index = require(‘./routes/index‘)

const users = require(‘./routes/users‘)

// error handler

onerror(app)

// middlewares

app.use(bodyparser({

enableTypes:[‘json‘, ‘form‘, ‘text‘]

}))

app.use(json())

app.use(logger())

app.use(require(‘koa-static‘)(__dirname + ‘/public‘))

app.use(views(__dirname + ‘/views‘, {

extension: ‘pug‘

}))

// logger

app.use(async (ctx, next) => {

const start = new Date()

await next()

const ms = new Date() - start

console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})

// routes

app.use(index.routes(), index.allowedMethods())

app.use(users.routes(), users.allowedMethods())

// error-handling

app.on(‘error‘, (err, ctx) => {

console.error(‘server error‘, err, ctx)

});

//using websocket

// const server = require(‘http‘).createServer(app.callback());

// const io = require(‘socket.io‘)(server);

// io.on(‘connection‘, client => {

// console.log("有连接动作");

// client.on(‘event‘, data => { /* … */ });

// client.on(‘disconnect‘, () => { /* … */ });

// });

const io = require(‘socket.io‘)();

// io.on(‘connection‘, client => {

// });

io.of(‘/self‘).on(‘connection‘, client => {

console.log("服务端检测到连接----") ;

var data_obj={

name:"name",

age:12

}

io.of(‘/self‘).emit(‘server_event‘,data_obj); // emit an event to all connected sockets

client.on("client_event",function(data){

console.log("client_event");

console.log(data)

})

client.on(‘disconnect‘, () => { /* … */ });

});

io.listen(8888);

// server.listen(8888);

module.exports = app

----完----

上述代码复制粘贴可用。

原文地址:https://www.cnblogs.com/liuliu-hai/p/10995378.html

时间: 2024-10-12 03:27:41

websocket 实现 前端vue-socket.io 服务端 koa2(socket.io)的相关文章

进程池与线程池、协程、协程实现TCP服务端并发、IO模型

进程池与线程池.协程.协程实现TCP服务端并发.IO模型 一.进程池与线程池 1.线程池 ''' 开进程开线程都需要消耗资源,只不过两者比较的情况下线程消耗的资源比较少 在计算机能够承受范围内最大限度的利用计算机 什么是池? 在保证计算机硬件安全的情况下最大限度的利用计算机 池其实是降低了程序的运行效率,但是保证了计算机硬件的安全 (硬件的发展跟不上软件的速度) ''' from concurrent.futures import ThreadPoolExecutor import time p

android通过socket连接服务端(PC端)

自己的计算机网络的基础太差了,一个很小的Demo居然搞了快一天,真醉了,不过坑踩多了,自然知道怎么走路了. 首先,是服务端的代码 class Server implements Runnable{ public static void main(){ Thread server = new Thread(new Server()); server.start();} //服务端因为需要接受多个客户端的信息,所以需要一直开放端口等待客户端连入,我就不写try catch了,有点多 public v

前端加密-aes-256-cbc(服务端是php,项目是用的vue)

最近有一个项目是接口都需要进行加密,采用的加密方法是aes-256-cbc的模式.网上查找了好多资料,也折腾了好久.终于弄好了.特此记录下. 首先安装crypto-js. npm install crypto-js --save 然后定义2个方法,用于加密和解密.这里我将其命名为cryptoJS.js.放在utils文件夹下.具体代码如下: import CryptoJS from "crypto-js"; /** * * 第一个参数word是待加密或者解密的字符串: * 第二个参数k

C# socket异步 服务端

转自:  http://blog.csdn.net/qq_20282263/article/details/54310737 1 private Dictionary<string, Session> SessionPool = new Dictionary<string, Session>(); 2 private Dictionary<string, string> MsgPool = new Dictionary<string, string>();

Vue 2.0 服务端渲染入门

1 什么是服务端渲染 SSR server side render 就是通过后端吐模板,而不是通过前端ajax获取数据,拼接字符串. 2 为什么需要SSR 需要SEO,因为爬虫不会等待ajax结果. 客户端网络慢,加载速度慢,影响用户体验. 3 另一种解决办法 预渲染 不是一次性下载整个单页应用,预渲染只是在构建时为了特定的路由生成特定的几个静态页面 你用webpack可以很简单地通过prerender-spa-plugin来添加预渲染 4 NodeJS编写Vue的SSR 首先npm insta

Cocos2dx3.x使用socket创建服务端和客户端改进

由于一个网友使用笔者写的SocketClient作为游戏客户端网络数据接收类,出现了一些问题 这个问题就是因为当执行onRecv时创建了一个Sprite(Sprite::create("1.png")),而创建完成后sprite的数据混乱,或者MoveTo时返回的也是混乱数据.原因在于在多线程申请内存,在主线程使用就会出现问题.为了解决这个问题,特意看了cocos2dx的WebSocket的实现方式,发现当接收到数据时并不是立即调用回调函数,而是将数据信息加入到消息队列,当主线程更新时

java中socket创建服务端与客户端即时对聊

package tool; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; impo

java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&amp;服务端代码

java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12:54 8004人阅读 评论(6) 收藏 举报 socket服务器bufferstring网络java 第 1个异常是java.net.BindException:Address already in use: JVM_Bind.该异常发生在服务器端进行new ServerSocket(port)(p

使用socket模拟服务端与客户端传输文件

package netFile; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; public class SocketTask { //客