精华内容
下载资源
问答
  • WebSocket&WebApi技术

    2020-02-08 10:29:40
    注意: 1、websocket实际上,首先使用http与服务器实现第...2、websocket的长连接实际上,都由客户端使用心跳request与服务器保持链接,如果客户端request停止,则该客户端就处于游离状态 **************...

    视频教程:https://v.qq.com/x/page/a08649t3aqa.html

    注意:

    1、websocket实际上,首先使用http与服务器实现第一次握手,其后底层使用的任然是tcp协议

    2、websocket的长连接实际上,都由客户端使用心跳request与服务器保持链接,如果客户端request停止,则该客户端就处于游离状态

     

    ******************WebApi****************

    1、ASP.NET WebAPI构建API接口服务实战演练:https://ke.qq.com/course/386559?platform=1&pay_succ=1#term_id=100572039&pf=midas_group_pay-1000-pc-1000&outTradeNo=GP6631785689920847872&tokenId=E-200208130153844236

    2、Postman:可以模拟向服务器的某个接口,发送json的数据!(可以用于模拟WebApi的BS、CS客户端)

    3、VisualStudio联机组件包下载:

     

    5、VisualStudio项目间文件参考引用(一个项目参考引用另一个项目的文件,不是复制,而是关联引用

    一个项目中引用另一个项目中的文件,但是不拷贝,可以alt+拖动该文件到新项目中即可,这样相当于创建了该文件的快捷方式!

    展开全文
  • namespace WebApiDemo.Controllers { public class SocketController : ApiController { //websocket列表,用于记录在线websocket链接 private static List<UserWebSocket> webSockets = new List(); [HttpGet] ...
    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Net.WebSockets;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Http;
    using System.Web.WebSockets;
    
    namespace WebApiDemo.Controllers
    {
        public class SocketController : ApiController
        {
            //websocket列表,用于记录在线websocket链接
            private static List<UserWebSocket> webSockets = new List<UserWebSocket>();
    
            [HttpGet]
            [Route("Connect")]
            public HttpResponseMessage Connect()
            {
    
                //在服务器端接受Web Socket请求,传入的函数作为Web Socket的处理函数,待Web Socket建立后该函数会被调用,在该函数中可以对Web Socket进行消息收发
                HttpContext.Current.AcceptWebSocketRequest(ProcessRequest);
    
                return Request.CreateResponse(HttpStatusCode.SwitchingProtocols); //构造同意切换至Web Socket的Response.
            }
    
            public async Task ProcessRequest(AspNetWebSocketContext context)
            {
                var socket = context.WebSocket; //传入的context中有当前的web socket对象
                //进入一个无限循环,当web socket close是循环结束
                while (true)
                {
                    var byte_length = 20971520;
                    var buffer = new ArraySegment<byte>(new byte[byte_length]);
                    //对websocket进行异步接收数据
                    var receivedResult = await socket.ReceiveAsync(buffer, CancellationToken.None);
                    //信息接收,我这边定义的消息结构为 userid:toUserid:content
    
                    string recvMsg = Encoding.UTF8.GetString(buffer.Array, 0, receivedResult.Count);
                    var msg = JsonConvert.DeserializeObject<SocketMsg>(recvMsg);
    
                    System.Threading.Thread.Sleep(10);
                    if (receivedResult.MessageType == WebSocketMessageType.Close)
                    {
                        if (msg == null)
                        {
                            break;
                        }
                        //如果连接已关闭,则删除记录
                        await socket.CloseAsync(WebSocketCloseStatus.Empty, string.Empty, CancellationToken.None); //如果client发起close请求,对client进行ack
                        webSockets.Remove(webSockets.FirstOrDefault(p => p.UserId == msg.userid));
                        break;
                    }
    
                    if (socket.State == WebSocketState.Open)
                    {
                        string message = "";
                        //此处将web socket对象加入一个静态列表中
                        var newWebsocket = webSockets.FirstOrDefault(p => p.UserId == msg.userid);
                        if (newWebsocket == null)
                        {
                            webSockets.Add(new UserWebSocket
                            {
                                UserId = msg.userid,
                                WebSocket = socket
                            });
                        }
                        else
                        {
                            newWebsocket.WebSocket = socket;
                        }
    
    
                        //组装返回的消息
                        message = JsonConvert.SerializeObject(msg); //content;
                        var recvBytes = Encoding.UTF8.GetBytes(message);
                        var sendBuffer = new ArraySegment<byte>(recvBytes);
                        //消息处理判断,也就是一开始进行连接的时候数据为空,我们不会发送数据到目标WebSocket
    
    
                        if (msg.msg != null)
                        {
                            if (msg.msg.ToString() != "__loop__" || msg.msg.ToString() != "_*_success_*_")
                            {
                                var toUser = GetOpenUserList();
                                foreach (var item in toUser)
                                {
                                    var r = RemoveUser(item);
                                    if (!r)
                                    {
                                        continue;
                                    }
                                    if (item.UserId == msg.touser)
                                    {
                                        try
                                        {
                                            //判断用户连接状态
                                            if (item.WebSocket.State == WebSocketState.Open)
                                            {
                                                //消息发送给目标websocket
                                                await item.WebSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);
                                            }
                                            else
                                            {
                                                webSockets.Remove(item);
                                            }
                                        }
                                        catch (WebSocketException e)
                                        {
                                            webSockets.Remove(item);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                recvBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(msg));
                                sendBuffer = new ArraySegment<byte>(recvBytes);
                                var toWebSocket = webSockets.FirstOrDefault(p => p.UserId == msg.userid);
                                if (toWebSocket != null)
                                {
                                    try
                                    {
                                        //消息发送给目标websocket
                                        await toWebSocket.WebSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);
                                    }
                                    catch (WebSocketException e)
                                    {
                                        webSockets.Remove(toWebSocket);
                                    }
                                }
                            }
                        }
                    }
                }
            }
    
            /// <summary>
            /// 删除无效用户
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public bool RemoveUser(UserWebSocket user)
            {
                try
                {
                    var a = user.WebSocket.State;
                    return true;
                }
                catch (Exception ex)
                {
                    webSockets.Remove(user);
                    return false;
                }
            }
            /// <summary>
            /// 获取有效的用户
            /// </summary>
            /// <param name="users"></param>
            /// <returns></returns>
            public List<UserWebSocket> GetOpenUserList()
            {
                List<UserWebSocket> userlist = new List<UserWebSocket>();
                foreach (var i in webSockets)
                {
                    try
                    {
                        var a = i.WebSocket.State;
                        userlist.Add(i);
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                }
                return userlist;
            }
    
    
        }
    
    
        public class UserWebSocket
        {
            public string UserId { get; set; }
            public WebSocket WebSocket { get; set; }
        }
    
        public class SocketMsg
        {
            /// <summary>
            /// 发送人id/用户id
            /// </summary>
            public string userid { get; set; }
            /// <summary>
            /// 接收人id
            /// </summary>
            public string touser { get; set; }
            /// <summary>
            /// 消息内容
            /// </summary>
            public object msg { get; set; }
        }
    }
    

    js WebSocket封装
    js WebSocket封装 SocketStart.js下载

    展开全文
  • WebSocket使用之API

    2017-08-21 11:44:29
    WebSocket API Internet Explorer 10 和使用 JavaScript 的 Windows 应用商店应用引入了对 WebSocket API 的支持,其定义位于万维网联盟 (W3C) 的 WebSocket API 规范中。WebSockets 技术为通过 Internet 进行的...

    WebSocket API
           Internet Explorer 10 和使用 JavaScript 的 Windows 应用商店应用引入了对 WebSocket API 的支持,其定义位于万维网联盟 (W3C) 的 WebSocket API 规范中。WebSockets 技术为通过 Internet 进行的双向通信提供了一个新的 W3C JavaScript API 和协议。这个新协议更便于直接处理固定数据格式,它会绕过速度较慢的基于文档的 HTTP 协议。

           当前的 HTTP 标准协议很慢,因为它必须从服务器请求文档而且必须等待该文档发送,才能显示网页。使用 WebSocket,你可以使用文本、二进制数组或 BLOB 立即发送和接收你的数据。

           WebSocket API 非常简单,它只需非常少的代码。你可以方便地利用低延迟双向数据交换,从而有助于快速创建在线游戏、即时社交网络通知、实时显示股市和天气信息,以及其他实时数据。

    实现 WebSocket
           如果你按照下列步骤进行操作,则实现此数据交换新技术将非常简单:
    1. 使用一个客户端浏览器来实现 WebSocket 协议。
    2. 在网页中编写代码来创建客户端 Websocket。
    3. 在 Web 服务器上编写代码来通过 Websocket 响应客户端请求。

    使用 WebSocket 客户端
           Internet Explorer 10 实现 WebSocket 协议,如同其他主流浏览器的行为。你可在 caniuse.com 网站上看到浏览器支持的当前状态。

           在 IETF 工具网站中指定的 WebSocket 协议使用以下新的 URL 方案。
    HTML

    ws://
    wss://

    编写 WebSocket 客户端代码
           你的网页代码必须执行以下操作:

           1. 初始化 websocket 并连接到服务器。
           2. 测试以查看它是否成功。
           3. 发送和接收数据。

           以下代码显示了指定 websocket URL 的典型代码:
    JavaScript

    var host = 'ws://example.microsoft.com';

           以下代码显示了如何连接到 websocket 并测试以查看它是否成功。
    JavaScript

     var host = "ws://sample-host/echo";
     try {
        socket = new WebSocket(host);
    
        socket.onopen = function (openEvent) {
           document.getElementById("serverStatus").innerHTML = 
              'WebSocket Status:: Socket Open';
        };
    
     socket.onmessage = function (messageEvent) {
    
        if (messageEvent.data instanceof Blob) {
        var destinationCanvas = document.getElementById('destination');
        var destinationContext = destinationCanvas.getContext('2d');
        var image = new Image();
        image.onload = function () {
           destinationContext.clearRect(0, 0, 
              destinationCanvas.width, destinationCanvas.height);
           destinationContext.drawImage(image, 0, 0);
        }
        image.src = URL.createObjectURL(messageEvent.data);
     } else {
        document.getElementById("serverResponse").innerHTML = 
           'Server Reply:: ' + messageEvent.data;
        }
     };
    
     socket.onerror = function (errorEvent) {
        document.getElementById("serverStatus").innerHTML = 
          'WebSocket Status:: Error was reported';
        };
    
     socket.onclose = function (closeEvent) {
        document.getElementById("serverStatus").innerHTML = 
          'WebSocket Status:: Socket Closed';
        };
     }
      catch (exception) { if (window.console) console.log(exception); }
     }
    
     function sendTextMessage() {
    
        if (socket.readyState != WebSocket.OPEN) return;
    
        var e = document.getElementById("textmessage");
        socket.send(e.value);
     }
    
     function sendBinaryMessage() {
        if (socket.readyState != WebSocket.OPEN) return;
    
        var sourceCanvas = document.getElementById('source');
    
        socket.send(sourceCanvas.msToBlob());
     }    

           前面的代码假设你有 serverStatusdestinationserverResponsetextmessageserverData 作为你的网页中带 ID 的元素。如果 F12 开发人员工具正在运行,捕获结果将显示在控制台窗口中。 要发送文本消息数据,请使用以下类型的代码。
    JavaScript

    var e = document.getElementById("msgText");
    socket.send(e.value);

           上面的代码示例假设你有要使用网页中带 ID 的 msgText 元素发送的消息文本。同样,你可以使用 onmessage 事件检测新消息或使用 send 方法发送消息到服务器。send 方法可用于发送文本、二进制数组或 Blob 数据。

    编写 WebSocket 服务器代码

           处理套接字的服务器代码能够以任何服务器语言编写。无论你选择哪种语言,都必须编写代码以接受 WebSocket 请求并相应地处理它们。

    WebSocket 编程

           WebSocket 提供一组可用于 WebSocket 编程的对象、方法和属性。

    名称 类型 描述
    WebSocket 对象 提供到远程主机的双向通道。
    close 方法 关闭 websocket。
    send 方法 使用 websocket 发送数据到服务器。
    binaryType 属性 由 onmessage 接收的二进制数据格式。
    bufferedAmount 属性 使用 send 的已排队的数据字节数。
    extensions 属性 报告服务器所选中的扩展名。
    onclose 属性 当套接字关闭时调用的事件处理程序。
    onerror 属性 当出现错误时调用的事件处理程序。
    onmessage 属性 通知接收到消息的事件处理程序。
    onopen 属性 当 websocket 已连接时调用的事件处理程序。
    protocol 属性 报告服务器所选中的协议。
    readyState 属性 报告 websocket 连接的状态。
    url 属性 报告套接字的当前 URL。
    展开全文
  • websocket访问ServletAPI

    千次阅读 2014-08-25 09:58:30
    对于一个java web程序来说或多或少都要使用ServletAPIwebsocket也不会例外。但是 websocket实用注解的方式来完成服务端配置,使用的协议也是WebSocket,这和之前的基于Ajax方式的轮询和长连接方式都不相同,所以...

    对于一个java web程序来说或多或少都要使用ServletAPI,websocket也不会例外。但是

    websocket实用注解的方式来完成服务端配置,使用的协议也是WebSocket,这和之前的基于Ajax方式的轮询和长连接方式都不相同,所以访问ServletAPI方式也有所不同,那我们怎么才能让websocket访问到ServletAPI呢?

    WebSocket有一个Configurator(该类的完整路劲javax.websocket.server.ServerEndpointConfig.Configurator)类,我们可以通过继承这个类,重写其中的方法(modifyHandshake),然后通过注解的方式配置,达到我们访问ServletAPI的目的。下面我以websocket获取HttpSession为例演示,具体代码如下:

    继承Configurator类

             publicclass MyConfiguratorextendsConfigurator {

     

            @Override

            publicvoid modifyHandshake(ServerEndpointConfig sec,

                    HandshakeRequest request,HandshakeResponse response) {

                        //获取HttpSession

                        HttpSession httpSession =(HttpSession)request.getHttpSession();

                        //保存HttpSessionUserProperties

                        sec.getUserProperties().put("httpSession", httpSession);

            }

       

    }

     

    配置websocket类,并在该类中获取已经存放的httpSession

    @ServerEndpoint(value="server",configurator=MyConfigurator.class)

    publicclass Server {

        @OnOpen

        publicvoid start(Session session){

            //注意两种Session的区别,参数中Sessionwebsocketsession,用这个//session可以获取UserProperties,再通过该对象获取已经存入其中的HttpSession对象

            HttpSession httpSession =(HttpSession)session.getUserProperties().get("httpSession");

            //然后至于你怎么使用该httpSession对象那就要看你的目的了。

        }

    }

     

    展开全文
  • WebSocket 之 Java API

    万次阅读 热门讨论 2012-01-10 15:24:03
    本文目的 最近项目中使用到WebSocket 需要java 对WebSocket 进行一个封装,来回折腾了几...接下来介绍WebSocket 和 Java 怎么调用以及工具。希望对大家有用。 WebSocket 简介 WebSockets是在一个(TCP)接口进行双
  • .Net 4.0使用httpClient调用WebApi接口时提示“由于远程方已关闭传输流,身份验证失败。” 参考https://blog.csdn.net/qiaohuyue/article/details/105856312 在.Net 4.0使用httpClient调用WebApi接口时,程序执行到下...
  • c# webapi websocket 服务端消息发送 WebSocketForWebAPI:https://gitee.com/lycz/WebSocketForWebAPI 服务端发送消息,控制器代码 private readonly ClientWebSocket webSocket = new ClientWebSocket(); ...
  • 按快捷键ctrl + shift + alt + s 或者是点击下图中“A”处,打开窗口,将websocket-api.jar 的适用范围由Compile改为Provide,ok,解决问题。(如果是maven的话,应该是改jar的scope属性) ...
  • curl调用调试webapi

    2019-02-20 16:02:59
    curl可用于在linux下进行简单的接口测试。 以post为例,格式如下, curl 你的url -X POST -H "...curl http://test.buzhidao.com/api/NongShaApi/burenshiMethod -X POST -H "Content-...
  • Web API 接口之WebSocket

    2017-04-25 15:37:00
     WebSocket 提供了一组创建和管理WebSocket的连接,以及可以通过连接发送和接受数据的API。简单地说就是提供服务端和客户端进行全双工通信,客户端和服务端之间存在持久的连接,而且双方都可以随时发送数据。  ...
  • 后台我是采用webapi 方式 写WebSocket,本来想用singler,后面有考虑到是vue 项目,就直接使用WebSocket了,因为不需要对ie做兼容。 后台具体代码,因为可能多个浏览器 访问都是不用的sockt 对象,需要分别存储在...
  • 有客户在调用接口时反馈在调用接口界面没有语音对讲接口,其实EasyCVR流媒体服务器平台是通过websocket接入进来,PC端通过麦克风录音,通过WebSocket实时传递到后台。前端web页面需要采集音频,浏览器由于安全考虑...
  • 有客户在调用接口时反馈在调用接口界面没有语音对讲接口,其实EasyCVR流媒体服务器平台是通过websocket接入进来,PC端通过麦克风录音,通过WebSocket实时传递到后台。前端web页面需要采集音频,浏览器由于安全考虑...
  • 应用场景:前端页面发起一个websocket请求与后端进行实时通讯。后端监听某端口获取数据,将监听到的数据加工处理,通过websocket发送到前端。  这里只提供后台的处理方案仅供参考。 1.后端监听某端口,获取数据并...
  • unity写的讯飞语音识别合成与评测功能,走的是webapi,连接讯飞WebSocket服务器没有接入任何sdk,也没有多余插件,开发工具unity2019.3.6 ,真正实现了跨平台,不用在每个平台重新接入sdk这么麻烦了!
  • 组件的Webapi控制器不但可以被Http调用,同时也支持Websocket调用。因此服务启动后相关的Webapi控制器是采用那种方式调用则取决于客户端使用那种方式。启动服务首先需要引用BeetleX.FastHttpApi组件,引用后即可定义...
  • 通过HTTP或WebSocket对的事件进行上报以及接收请求来调用调用酷Q的DLL接口,从而可以使用其他语言编写酷Q插件。支持Windows 7和Windows Server 2008及更新版本,也可以运行在Wine,Docker 。 使用方法 使用方法见的...
  • WebSocket JavaScript API

    2019-06-27 14:47:39
    WebSocket是HTML5提供的一种在单个TCP...Web中已经有了HTTP协议,为什么还需要WebSocket协议呢? 由于HTTP协议有一个天生的缺陷:通信只能由客户端发起,因此HTTP协议做不到服务器主动向客户端推送信息。 HTTP...
  • 三、websocket API介绍四、数据库表设计Ⅰ.需求分析(参考csdn私信功能)Ⅱ.表的设计Ⅲ.Sql语句五、前端页面Ⅰ、简单前端代码Ⅱ、页面展示Ⅲ、页面说明六、后端业务处理Ⅰ.引入依赖Ⅱ.websocket配置类 一、前言 这篇...
  • WebSocket协议入门:WebSocket API

    千次阅读 2020-04-15 17:24:00
    点击connect按钮,服务器代码显示 点击send按钮,浏览器发送数据,服务器回送... var wsServer = 'ws://192.168.189.155:9096/';ws代表websocket的意思。 https://www.cnblogs.com/fuqiang88/p/5956363.html ...
  • websocket可以和服务器建立持久的连接,依靠事件去推动 客户端代码:   <%@ page language="java" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <title>Java...
  • OBS的Java API 与OBS通信的Java API。 当前支持Java 11+ Websocket客户端和Jackson的 。 消息 版本1.3已发布,并基于obs-websocket协议定义重建了要生成的事件请求。 它还支持OBS v4.9.0中的所有请求。 1.4版旨在...
  • WebSocket API

    千次阅读 2012-07-19 16:15:51
    HTML5 WebSocket是HTML5中最强大的通信功能,定义了一个全双工通信信道,仅通过Web上的一个Socket即可进行通信;是对常规HTTP通信的另一种增量加强。 (一)实时和HTTP: WebSocket之前实现都是通过传统的Comet和...
  • 创建自己的websocket客户端 package com.gapf.app.v1.controller; import com.gapf.entity.service.ext.RunService; import com.gapf.entity.service.impl.ext.RunServiceImpl; import javax.websocket.*; import ...
  • WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。...在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建...
  • WebSocket API简介

    2014-12-16 10:20:02
    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chrome12就已经开始支持,随着协议草案的不断变化,各个...
  • WebSocket是HTML5提供的一种在单个TCP连接上进行全双工通信(双向通信)的协议,WebSocket使客户端和服务端之间的数据交换变得...Web中已经有了HTTP协议,为什么还需要WebSocket协议呢? 由于HTTP协议有一个天...
  • Websocket java api (jsr 356) study notes

    千次阅读 2014-04-28 11:47:16
    websocket 下一代ji'shi jsr Java Websocket API

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,874
精华内容 7,949
关键字:

websocket调用webapi