首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Go语言实现WebSocket消息发送案例

使用Go语言实现WebSocket消息发送案例

原创
作者头像
Balliol Chen
发布于 2022-05-12 09:36:26
发布于 2022-05-12 09:36:26
2.8K00
代码可运行
举报
文章被收录于专栏:我和你我和你
运行总次数:0
代码可运行

摘要

本文将使用Go语言 gorilla/websocket 库在线实现一个基于WebSocket的消息发送的案例,我们将建立一个简单的服务端用于回播我们向它发送的一切消息。本案例可在线运行,以便于--新消息频 道更好的理解go语言的使用以及WebSocket的实际应用。

WebSocket简介

因为HTTP协议是非持久化的,单向的网络协议,是不支持长连接的,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。之前要实现实时的通信,采用是下图左方的轮询方式,资源消耗非常大。

HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。WebSocket简单的来讲,就是可以在浏览器里支持双向通信。

正文

Go语言环境准备

请前往该页完成安装后返回本页进行下一步。

go环境安装新消息频道 提供)

准备gorilla/websocket 库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/gorilla/websocket

language-bash

WebSocket服务端文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~
cat > websockets.go << EOF
// websockets.go
package main
 
import (
    "fmt"
    "net/http"
    "github.com/gorilla/websocket"
)
 
var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}
 
func main() {
    http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) {
        conn, _ := upgrader.Upgrade(w, r, nil) // error ignored for sake of simplicity
 
        for {
            // Read message from browser
            msgType, msg, err := conn.ReadMessage()
            if err != nil {
                return
            }
 
            // Print the message to the console
            fmt.Printf("%s sent: %s\n", conn.RemoteAddr(), string(msg))
 
            // Write message back to browser
            if err = conn.WriteMessage(msgType, msg); err != nil {
                return
            }
        }
    })
 
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "websockets.html")
    })
 
    http.ListenAndServe(":80", nil)
}
EOF

WebSocket客户端文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~
cat > websockets.html << EOF
<!-- websockets.html -->
<input id="input" type="text" />
<button onclick="send()">Send</button>
<pre id="output"></pre>
<script>
    var input = document.getElementById("input");
    var output = document.getElementById("output");
    var socket = new WebSocket("ws://localhost:80/echo");
 
    socket.onopen = function () {
        output.innerHTML += "Status: Connected\n";
    };
 
    socket.onmessage = function (e) {
        output.innerHTML += "Server: " + e.data + "\n";
    };
 
    function send() {
        socket.send(input.value);
        input.value = "";
    }
</script>
EOF

运行验证

在右侧实验区打开+号下的open vnc后,在桌面下新建一个终端,运行~/firefox/firefox,打开FireFox,输入localhost即可看到使用的效果。

完结

以上就是使用Go语言实现WebSocket消息发送案例的所有内容,欢迎小伙伴们交流讨论。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NET 4.0 的Web Form和EF的例子 Employee Info Starter Kit (v4.0.0)
ASP.NET 4.0改进了许多不同的场景集(set of scenarios),如Webforms ,Dynamic Data以及基于AJAX的Web开发。此外还有许多对支撑ASP.NET的核心运行时环境的改进,比如Caching, Session,还有Request/Response对象。虽然现在MVC是非常流行的,Web Form作为ASP.NET的传统,在企业应用开发中Web Form采用更普遍,Employee Info Starter Kit 虽然简单,数据库只有一个表Employee, 麻雀虽
张善友
2018/01/30
1.1K0
VsDoc for jQuery
Microsoft 现在完全支持 jQuery 并将它集成在ASP.NET MVC 框架。jQuery-vsdoc.js文件,该文件对串连的jQuery selector方法的JavaScript intellisense提供了帮助注释和支持。 此外,扩展已完全集成 jQuery Visual Studio 2008 SP 1 中的 IntelliSense。2009年2月24日Visual Web Developer Team宣告了1.3*-vsdoc的官方版本! 現在大家可以直接由jQuery官方网站的
张善友
2018/01/30
9820
实战 ASP.NET Web API
Web API 框架是一个面向 Http 协议的通信框架。相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置。Web API 的开发类似于 ASP.NET MVC 中控制器的开发,但是相对于直接使用 ASP.NET MVC 来返回 Json 对象的方式而言,Web API 封装了数据的序列化、反序列化,接口、实现都更加简单。 简单地说,如果要向浏览器、移动端提供 Json 数据格式的 API,则应该首选 Web API 作为通信框架。 以下,我列出了在当前
用户1172223
2018/01/29
1.6K0
实战 ASP.NET Web API
Using ASP.NET and jQuery to Pass Multiple Values from a GridView to Another Page
Using ASP.NET and jQuery to Pass Multiple Values from a GridView to Another Page In one of our previous article Pass Multiple Values from a GridView to Another Page using ASP.NET, we had seen how to select a GridView row and pass multiple values of the se
阿新
2018/04/12
1.1K0
jQuery和asp.net mvc相关资源链接
jQuery: Simplify calling ASP.NET AJAX services from jQuery jQuery Splitter jHtmlArea – The all NEW HTML WYSIWYG Editor for jQuery Expand table rows with jQuery - jExpand plugin Quick Tip – Reading & Editing HTML Attributes in jQuery Use jQuery and ASP.NET
张善友
2018/01/22
1.5K0
锋利的JQuery学习笔记之JQuery-Ajax的应用
  今天终于看到了最令我兴奋的一章:JQuery与Ajax的应用。AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式应用的网页开发技术。在最初学习Ajax的日子里,我被ASP.NET AJAX框架提供的UpdatePanel迷惑了,以后Ajax就这么简单,所以在最初做的几个项目里,前台代码里必至少有一个UpdatePanel区域,把要局部刷新的内容全放到这个Panel里面,殊不知一个UpdatePanel只适合于局域网的内部信息系统,不适合在前台互联网中使用,这样效率很低。
Edison Zhou
2018/08/20
7630
锋利的JQuery学习笔记之JQuery-Ajax的应用
通过ASP.NET Web API + JQuery创建一个简单的Web应用
看了dudu的《HttpClient + ASP.NET Web API, WCF之外的另一个选择》一文,想起多很久之前体现ASP.NET Web API而创建的一个Demo。这是一个只涉及到简单CRUD操作的Web应用,业务逻辑以Web API的形式定义并以服务的形式发布出来,前台通过jQuery处理用户交互并调用后台服务。[源代码从这里下载] 目录 一、一个简单的基于CRUD 二、通过ASP.NET Web API提供服务 三、通过JQuery消费服务 一、
蒋金楠
2018/01/15
1K0
通过ASP.NET Web API + JQuery创建一个简单的Web应用
彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器
基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻烦,而且非常笨拙,非常不友好,特别是对呆在政府部门的老爷们,要让他们手动输入人员,简直就是痴心妄想。总之一句话,越简单越好。   为了让客户满意,必须要对人员选择器进行改造,原生的PeopleEditor彻底抛弃。只能另辟蹊径,寻找适合的JQuery插件,创建新的人员选择器,分析了一下需求,可以归纳新的人员选择器必须支持如下情况: 支持人员的多选,比如像会议、通知需要对多人进行发送,当然也要支持删除。 对于单选的
用户1161731
2018/01/11
1.1K0
彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器
【ASP.NET Core 基础知识】--MVC框架--Views和Razor语法
在ASP.NET Core的MVC(Model-View-Controller)框架中,View 扮演着呈现用户界面的角色。View负责展示应用程序的数据给用户,并接收用户的输入。它与Model和Controller协同工作,通过模型绑定从Controller获取数据,然后使用Razor语法或其他视图引擎将数据呈现为用户可见的HTML。
喵叔
2024/01/11
2.6K0
使用jquery-easyui写的CRUD插件(3)
好,静态的页面已经可以完成了,下面就开始加上后台的处理部分。 查看easyui的API可以看到,如果需要后台支持的话,需要设置url属性,下面用java来做后台处理数据。 传输的格式用的是JSON,如果你还不知道JSON那么就去baidu一下好了。 后台现在只添加了struts和spring的支持,如果需要连接数据库那么添加上hibernate或者用jdbc等数据处理层的框架好了 好新建jsp页面,添加默认的编码格式为UTF-8 <%@ page language="java" contentType="t
cloudskyme
2018/03/19
1.2K0
使用jquery-easyui写的CRUD插件(3)
16个超实用的jQuery技巧攻略
本文我们将为jQuery用户分享8个超实用的技巧攻略。jQuery是JavaScript最好的库之一,主要用于制作动画、事件处理,支持Ajax及HTML 脚本客户端。此外,jQuery还拥有各种插件,以帮助开发者在最短时间内快速创建网站/网页。
用户7657330
2020/08/14
1.2K0
学习Altas 笔记[JS简单调用服务端方法]
      在Ajax框架中,Asp.net方面最强当属Altas最强,以前使用AjaxPro.Net和MagicAjax. 最几个都比较好用。这几个月来Altas已经进入CTP版本,是开始学习研究Altas的时机了。准备利用Altas为 http://www.yupsky.com 开发成员之间在线通讯的类似于MSN这样的功能。今天初步的学习了一下Altas,最基础的学习内容就是使用javascript调用服务端代码。      Altas和AjaxPro.Net类似,但比AjaxPro.Net强大很多。学
张善友
2018/01/19
9450
学习Altas 笔记[JS简单调用服务端方法]
Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)
 很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互。RESTful则是一种软件架构风格、
张果
2018/01/04
2.3K0
Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)
强烈推荐:240多个jQuery插件
概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不
hbbliyong
2018/03/05
2.2K0
强烈推荐:240多个jQuery插件
DropDownList下拉框多选
最近弄完个项目、项目需要支持多选功能、找了很多例子没找到合适的,最后自己开发了个控件:
跟着阿笨一起玩NET
2018/09/18
14.9K0
DropDownList下拉框多选
快速学习-综合案例RESTRUL_CRUD
发起请求,无法执行,因为delete请求必须通过post请求转换为delete请求,借助:HiddenHttpMethodFilter过滤器
cwl_java
2020/02/19
1.9K0
快速学习-综合案例RESTRUL_CRUD
这样就可以自由的使用Django
Django 之于 Python,犹如 Spring 之于 Java。Django 是 Python 的 web 开发框架,既然是框架,就是一套完整的解决方案,使用框架的时候,需要把你的代码放到框架合适的地方,框架会在合适的时机调用你的代码,框架控制一切,我们只需要按照规则写代码。
somenzz
2020/11/25
7190
MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)
  jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更好的体验!   调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化;
aehyok
2018/09/11
1.9K0
MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)
一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目
这是一个基于最新的ASP.net core 5.0创建Razor Page应用程序解决方案模板。遵循Clean Architecture的原则,以最求简洁的代码风格和实现快速开发小型的web业务系统的目标,并且从没停止过更新。该项目从最早的asp.net web form,asp.net mvc5 到 asp.net core 3.1再到现在最新的asp.net core 5.0 Razor Page,从简单三层结构到N层结构再到现在流行的CQRS模式,一遍一遍的再重构,在这过程中体会到系统架构的重要性和在优秀的框架下开发系统是一件多么愉快的事情。做这样的项目纯粹是为了兴趣和能和很多Github上优秀的程序员一起交流和学习。
阿新
2021/08/19
1.2K0
一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目
手动实现jQuery Tools里面tab功能
平时开发中用的Javascript类库都是jQuery,用到插件或者第三方类库能从jQuery Tools里面找到,基本不用其他的。当然有时同事喜欢使用jQuery UI里面的插件。并且jQuery Tools里面的插件和jQuery UI里面的插件还会出现冲突。这个事情就不舒服了。不过基本开发之前就确定好用哪个类库,免得后期开发中因为冲突的增加,增加项目的开发周期和开发成本。当然如果你掌握好jQuery Tools里面的插件,有些功能和效果很快就开发好了。之前一个项目,就只使用了jQuery Tools里
八哥
2018/01/18
1.6K0
手动实现jQuery Tools里面tab功能
推荐阅读
相关推荐
.NET 4.0 的Web Form和EF的例子 Employee Info Starter Kit (v4.0.0)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档