[Go] 实现websocket服务端
直接使用官方子包可以实现websocket协议,
package main import (
"time"
"log"
"net/http"
"golang.org/x/net/websocket"
)
func main(){
http.HandleFunc("/",index)
http.Handle("/websocket",websocket.Handler(instantMessage))
log.Println("start server")
err:=http.ListenAndServe(":1234",nil)
log.Println(err)
}
func index(res http.ResponseWriter,req *http.Request){
res.Write([]byte("hello world"))
}
func instantMessage(w *websocket.Conn) {
var error error
for {
var reply string
if error= websocket.Message.Receive(w,&reply);error!=nil{
log.Println("接受消息失败",error)
break
}
log.Println("客户端:",reply) msg:="服务端:"+reply+time.Now().String()
log.Println(msg)
if error = websocket.Message.Send(w, msg); error != nil {
log.Println("发送消息失败")
break
}
}
}
客户端代码:
<html>
<head>
<title>好好学习</title>
</head>
<body>
<script type="text/javascript">
var sock = null;
// var wsuri = "wss://127.0.0.1:8080"; //本地的地址 是可以改变的哦
var wsuri = "ws://localhost:1234/websocket"; //本地的地址 是可以改变的哦 window.onload = function() {
//可以看到客户端JS,很容易的就通过WebSocket函数建立了一个与服务器的连接sock,当握手成功后,会触发WebScoket对象的onopen事件,告诉客户端连接已经成功建立。客户端一共绑定了四个事件。
console.log("开始了 onload");
sock = new WebSocket(wsuri);
//建立连接后触发
sock.onopen = function() {
console.log(" 建立连接后触发 connected to " + wsuri);
}
// 关闭连接时候触发
sock.onclose = function(e) {
console.log("关闭连接时候触发 connection closed (" + e.code + ")");
}
// 收到消息后触发
sock.onmessage = function(e) {
console.log("收到消息后触发 message received: " + e.data);
document.getElementById('receive').innerHTML=e.data;
}
//发生错误的时候触发
sock.onerror=function (e) {
console.log("发生错误时候触发"+wsuri)
}
};
//如果sock被关闭掉了 这里 也会报错的啊
function send() {
var msg = document.getElementById('message').value;
sock.send(msg);
};
</script>
<h1>客户端</h1>
<form>
<p>发送: </p>
<textarea id="message" >我是陶士涵</textarea>
<p>接收: </p>
<textarea id="receive" ></textarea>
</form>
<button onclick="send();">给服务器发送消息</button>
</body>
</html>
[Go] 实现websocket服务端的更多相关文章
- C# WebSocket 服务端示例代码 + HTML5客户端示例代码
WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...
- nodejs搭建简单的websocket服务端
创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...
- WebSocket服务端
http://blog.csdn.net/qq_20282263/article/details/54310737 C# 实现WebSocket服务端 原创 2017年01月10日 09:22:50 ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- asp.net网站作为websocket服务端的应用该如何写
最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务.客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息. 其实,这个需求并不难,只是 ...
- Netty 搭建 WebSocket 服务端
一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...
- VB6+Winsock编写的websocket服务端
早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...
- .NET 即时通信,WebSocket服务端实例
即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...
- .NET实现WebSocket服务端即时通信实例
即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...
随机推荐
- 尺取法two pointers
目的:对给定的一个序列,在序列中寻找包含全部需求的.长度最小的一段子序列.一般用来解决具有单调性的区间问题. 时间复杂度:O(n) https://blog.csdn.net/lxt_lucia/ar ...
- 【ZooKeeper系列】1.ZooKeeper单机版、伪集群和集群环境搭建
ZooKeeper安装模式主要有3种: 单机版(Standalone模式)模式:仅有一个ZooKeeper服务 伪集群模式:单机多个ZooKeeper服务 集群模式:多机多ZooKeeper服务 1 ...
- Dubbo源码分析之 SPI(一)
一.概述 dubbo SPI 在dubbo的作用是基础性的,要想分析研究dubbo的实现原理.dubbo源码,都绕不过 dubbo SPI,掌握dubbo SPI 是征服dubbo的必经之路. 本篇文 ...
- linux-iptables增、删、改、保存
iptables基础: iptables的5条链分别是: prerouting 路由前 input 发到本机进程的报文 ouput 本机某进程发出的报文 forword 转发 postrouting ...
- tensorflow学习笔记——VGGNet
2014年,牛津大学计算机视觉组(Visual Geometry Group)和 Google DeepMind 公司的研究员一起研发了新的深度卷积神经网络:VGGNet ,并取得了ILSVRC201 ...
- LNMP-Nginx负载均衡
Nginx负载均衡介绍 Nginx提供负载均衡的模块upstream,这个模块是默认的,不需要重新编译模块.通常情况下,负载均衡一般用于后端两台机器同时提供服务供用户访问,但是用户经常访问的其中一台服 ...
- Vue中使用iconfont
学习博客:https://www.imooc.com/article/33597?block_id=tuijian_wz
- 【Java Web开发学习】Spring4条件化的bean
[Java Web开发学习]Spring4条件化的bean 转载:https://www.cnblogs.com/yangchongxing/p/9071960.html Spring4引入了@Con ...
- final关键字、finally代码块和finalize()方法有什么区别?
1. final是关键字,final可以修饰类.方法.属性. 如果一个类被final修饰,那么这个类就是最终类,不能派生出新的子类,不能作为父类被继承,该类中的所有方法都不能被重写,但是final类中 ...
- django基础之day10,cookie session token
https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token