为什么80%的码农都做不了架构师?>>>   

一般在dotnet core下构建使用web服务应用都使用asp.net core,但通过FastHttpApi组建也可以方便地构建web服务应用,在FastHttpApi功能的支持下构建多人聊天室是件非常简单的事情,通过组件并不需要了解WebSocket知识即可简单构建,以下讲解一下通过FastHttpApi如何构建一个简单的多人聊室。

创建项目

使用FastHttpApi构建一个WEB服务只需要创建一个普通ConsoleApp( 控制台应用)

创建项目后需要在Nuget中添加引用FastHttpApi

只需要简单地引用Beetlex.FastHttpApi即可构建基于HttpWebsocket通讯应用。

创建逻辑

FastHttpApi对类和方法没有太多规则约束,只需要在类上定义一个Controller标签即可,接下来实现一个简单的发送消息方法

    [Controller]public class Controller{public bool Talk(string name, string messge, IHttpContext context){ActionResult result = new ActionResult();result.Data = new { name, messge };context.SendToWebSocket(result);return true;}}

以上代码定义一个Talk方法,方法把发信息的昵称和消息发送当前服务上下文中的所有websocket连接。直接下来的事情就是要在页面上调用它,大家知道在页面调用http或websocket 需要定义一些代码和指定相应的URL。但Beetlex.FastHttpApi提供一个非常便利的方式,通过安装一个插件可以自动生成这些代码插件安装介绍(暂只支持vs2017).当插件安装完成后只需要设置类文件的自定义工具即可

插件会在当前类文下生成一个js文件,文件里把调用方法的URL和参数都定义完成

var $Talk$url='/talk';
function $Talk(name,messge,useHttp)
{return api($Talk$url,{name:name,messge:messge},useHttp).sync();
}
function $Talk$async(name,messge,useHttp)
{return api($Talk$url,{name:name,messge:messge},useHttp);
}

这个文件非常简单,主要包括URL,同步方法和异步方法。这个js文件需要依赖FastHttpApi.js才能使用,所以在页面上必须把这个文件也引用上。接下来就是页面脚本的使用

    <script>function onreceive(result) {$('<p><span class="label label-default">' + result.Data.name+'</span>:' + result.Data.messge + '</p>').appendTo('#lstTalk')}async function sendMessage() {var name = $('#name').val();var message = $('#msg').val();if (!name) {alert("enter name!");return;}if (!message) {alert('enter messgae');return;}var result = await $Talk(name, message);if (result.Code != 200) {alert(result.Error);}else$('#msg').val('');}$(document).ready(function () {api_receive(onreceive);//绑定消息接收事件});</script>

引用脚本后,直接通过方法调用即可,这种明确的方法调用比传统的jquery.post有着调用的明确性和便利性,让使用者不需要查看接口文档即可以知道方法的调用参数。如果控制器定了XML帮助注释,插件同样也会把注释生成到脚本中。

静态文件存储

组件通过固定的目录来存放静太资源,因此项目需要创建一个views目录来存储静态资源,views目录是web服务的根目录。

由于静态文件默认情况是不会被编译处理,所以我们需要把文件设置成编译嵌入模式或复制到输出目录中。如果是复制到输出目录下,可以在项目生成事件中添加一段复制代码。

启动服务

组件启动服务很简单,不过在启动前需要注册一下程序集,把控制器注册到HTTP服务中。

        static void Main(string[] args){mApiServer = new BeetleX.FastHttpApi.HttpApiServer();mApiServer.Debug();//只有在Debug模式下生产,把静态资源加载目录指向项目的views目录mApiServer.Register(typeof(Program).Assembly);//加载程序集中所有控制器信息和静态资源信息mApiServer.Open();Console.Write(mApiServer.BaseServer);Console.Read();}

组件默认是不需要配置即可启动HTTP服务,默认端口是9090.不过这些信息也是可以通过配置文件加载,只要程序目录存在HttpConfig.json文件组件即会加载配置文件中的配置信息来运行服务。配置文件详解

这样一个简单多人web聊天室就完成,运行效果如下:

详细代码

转载于:https://my.oschina.net/ikende/blog/2249071

使用FastHttpApi构建多人Web聊天室相关推荐

  1. 使用nodejs搭建你自己的专属web聊天室

    前言 前断时间在学习nodejs,自己闲来无事,在网上搜索了一些资料自己搭建了一个属于自己的web聊天室项目.现在把自己的开发过程和心得和大家分享,希望其中涉及到的一些知识对你有用. 项目开源地址:h ...

  2. 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》

    基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...

  3. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...

  4. Django项目--web聊天室

    需求 做一个web聊天室,主要练习前端ajax与后台的交互: 一对一聊天和群组聊天 添加用户为好友 搜索并添加群组 管理员可以审批用户加群请求,群管理员可以有多个,群管理员可以删除,添加禁言群友 与聊 ...

  5. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)...

    大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM ...

  6. LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(五)之使用RabbitMQ缓存消息

    前言 本系列文章特点:使用ASP.NET SignalR和LayIM快速入门对接,实现一对一聊天,群聊,添加聊天群组,查找聊天记录等功能.源代码不包含LayIM的源代码,因为官方并没开源属于收费资源, ...

  7. Spring和WebSocket整合并建立简单的Web聊天室

    Spring和WebSocket整合并建立简单的Web聊天室 官方主页 Spring WebSocket 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. Web ...

  8. 视频教程-多人网络聊天室-Unity3D

    多人网络聊天室 广州市码锋网络有限责任公司创始人,从事游戏开发九年,熟练前后端的各种技术,我很乐意将企业中商用的技术分享给你,帮助你解决工作的各种问题. 官剑铭 ¥39.00 立即订阅 扫码下载「CS ...

  9. 【项目设计】基于WebSocket的Web聊天室

    文章目录 1. 项目简介 2. 数据库表的设计 3. 实体类以及工具类的设计 3.1 实体类model 3.1.1 lombok的使用 3.2 工具类util 3.2.1 DBUtil 3.2.2 W ...

最新文章

  1. 上一篇的js处理失真数据存在问题换了种方法
  2. 深度学习100问-1:深度学习环境配置有哪些坑?
  3. mysql5.7版本源_用最新MySQL 8.0的源安裝MySQL 5.7版本(CentOS 7環境下)
  4. 云计算 java go c_面向对象编程的面向过程表示:c java go
  5. ABAP memory中的Export和Import
  6. J2EE dynamic web工程搭建 struts2
  7. label居中_表格固定列宽时如何居中?
  8. xamarin android 设备,【Xamarin.Android】在Visual Studio中增强设备日志记录
  9. 数据库实验一——数据库定义与操作语言实验
  10. b类 蚂蚁金服_终于拿到蚂蚁金服Offer!!!分享一下全程面试题和面试经验!...
  11. 西门子梯形图转换C语言,梯形图和指令表相互转换
  12. 触宝发布2018年第四季度财报 净收入增长147%
  13. javascript eval 函数作用
  14. 转载--给函数取个好名
  15. Ubuntu报错的情况及解决方法记录
  16. Visio2019安装教程(与正版office同时使用)
  17. 从SSD角度学习NAND Flash(一)
  18. 【机器学习实战】KNN
  19. Rust - Rocket框架 -基础入门
  20. 5秒钟用google earth engine(GEE)填补Landsat7条带问题

热门文章

  1. flac3d命令流实例大全_ANSYS APDL 疲劳分析实例附命令流
  2. python2安装pyyaml_Python3安装Pyyaml
  3. window环境编译在linux环境运行的golang程序
  4. python连接plc实例_Python连接数据库MySQL与操作示例
  5. cc2530期末试卷_无线传感网期末考试 zigbee期末考试试题
  6. 11 Python Pandas tricks that make your work more efficient
  7. L1标准化与L2标准化
  8. jmetter持续时间_Jmeter常用线程组设置及场景运行时间计算
  9. mysql用户数据导入_MySQL添加用户、删除用户与授权和数据的导入导出
  10. 笔记-中项案例题-2018年上-人力资源管理