用mongols轻松打造websocket应用
用websocket做聊天系统是非常合适的。
mongols是一个运行于linux系统之上的开源c++库,可轻松开启一个websocket服务器。
首先,build一个websocket服务器。
#include <mongols/ws_server.hpp>
//websocket server
int main(int,char**){
int port=9090;
const char* host="127.0.0.1";
mongols::ws_server server(host,port);
server.run();
}
才几行,这就成了吗?没错!不信你用wsdump.py测试下。测了啊,怎么一发送消息就关闭了连接?这是因为该服务器只接受json字符串消息,并且规定了几个必要field.否则只能接收消息,一发送就将关闭连接:
- gid,默认0
- uid,默认0
- gfilter,默认空数组[],表示转发给任意gid用户,非空则只发送给特定gid用户
- ufilter,默认空数组[],表示转发给任意uid用户,非空则只发送给特定uid用户
其他field为开发者自己决定。
因此,开发者只需在前端用javascript即可完成所有核心开发工作。
这里有演示地址和全部开源代码,包括前端和后端:
https://github.com/webcpp/fusheng

集成富文本编辑器quill,可发图片,代码,latex数学公式,纯文本当然没问题啦。
需要知道如何自定义图片上传的quill开发者,也可了解下。很简单的:
var quill = new Quill('#editor-container', {
modules: {
formula: true,
syntax: true,
toolbar: '#toolbar-container'
},
placeholder: 'To be a good man! The best brower is Chrome.',
theme: 'snow',
});
var toolbar = quill.getModule('toolbar');
toolbar.addHandler('image', function (e) {
document.getElementById('get_file').click();
});
$('#get_file').change(function () {
var upload_form = $('#upload_form');
var options = {
url: '/upload',
type: 'post',
success: function (ret) {
if (ret.err == 0) {
var range = quill.getSelection();
quill.insertEmbed(range.index, 'image', ret.upload_path);
$('#get_file').val('');
} else {
toast.show({
// 'error', 'warning', 'success'
// 'white', 'blue'
type: 'error',
// toast message
text: 'upload error',
// default: 3000
time: 3000 // 5 seconds
});
}
},
error: function () {
toast.show({
type: 'error', text: 'upload error or too big.', time: 3000
});
}
}
upload_form.ajaxSubmit(options);
});
用mongols轻松打造websocket应用的更多相关文章
- 用WPF轻松打造iTunes CoverFlow效果
原文:用WPF轻松打造iTunes CoverFlow效果 用WPF轻松打造iTunes CoverFlow效果 ...
- 【Microsoft Azure 的1024种玩法】八. 基于Azure云端轻松打造一款好用的私有云笔记
[简介] Leanote一款开源云笔记软件,它使用Go的Web框架revel和MongoDB开发完成的,其是目前为止发现的最有bigger的云笔记,它支持markdown输入,代码高亮,多人协作,笔记 ...
- iOS教你轻松打造瀑布流Layout
前言 : 在写这篇文章之前, 先祝贺自己, 属于我的GitHub终于来了. 这也是我的GitHub的第一份代码, 以下文章的代码均可以在Demo clone或下载. 欢迎大家给予意见. 觉得写得不错的 ...
- 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台
版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108597001488193402 来源:腾云阁 h ...
- 完全用nosql轻松打造千万级数据量的微博系统(转)
原文:http://www.cnblogs.com/imxiu/p/3505213.html 其实微博是一个结构相对简单,但数据量却是很庞大的一种产品.标题所说的是千万级数据量 也并不是一千万条微博信 ...
- 完全用nosql轻松打造千万级数据量的微博系统
其实微博是一个结构相对简单,但数据量却是很庞大的一种产品.标题所说的是千万级数据量也并不是一千万条微博信息而已,而是千万级订阅关系之间发布.在看 我这篇文章之前,大多数人都看过sina的杨卫华大牛的微 ...
- 【PS实例】轻松打造梦幻的照片
本系列教程将开始讲解PS的一些制作实例,通过实例的讲解同时介绍各种工具和面板机快捷键的使用,这样能够让大家更有兴趣学习,在学习的同时能够创造出自己喜欢的东西.本人使用的教程都是根据本人多次调试制作,仅 ...
- NNVM打造模块化深度学习系统(转)
[摘录理由]: 之所以摘录本文,主要原因是:该文配有开源代码(https://github.com/dmlc/nnvm):读者能够直接体会文中所述的意义,便于立刻展开研究. MXNet专栏 :NNVM ...
- 补习系列(20)-大话 WebSocket 与 "尬聊"的实现
目录 一.聊聊 WebSocket 二.Stomp 是个什么鬼 三.SpringBoot 整合 WebSocket A. 引入依赖 B. WebSocket 配置 C. 控制器 D. 前端实现 四.参 ...
随机推荐
- Petrozavodsk Summer-2016. Ural FU Dandelion Contest
A. Square Function 留坑. B. Guess by Remainder 询问$lcm(1,2,3,...,n)-1$即可一步猜出数. 计算$lcm$采用分治FFT即可,时间复杂度$O ...
- Egret--添加一个精灵事件
class Hello extends egret.DisplayObjectContainer{ //入口函数 private onAddStage(event:egret.Event){ //打开 ...
- selenium3+java+POM 跨浏览器测试之------读取配置文件
我们知道,web 测试的时候是需要切换不同的浏览器以查看每个功能在不同浏览器上的运行情况,使得开发的程序更具有健壮性.本文先总结一下如何通过读取配置文件来切换浏览器. 具体步骤如下: 一.编写配置文件 ...
- 小甲鱼Python第二十讲课后习题---021
笔记: 1.lambda表达式的作用: 1)Python写一些执行脚本时,使用lambda就可以省下定义函数的过程,比如说我们只是需要写一个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后 ...
- Mac_IntelliJ IDEA For Mac 快捷键
Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭头 ...
- ACM常用STL
转载于https://blog.csdn.net/riba2534/article/details/61929000 1. stack stack<int>st;//栈st,用于存放in ...
- 已知一个正整数m,编写一个程序求m的反序数(待消化)
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/5 21:08 * @description ...
- OUTLOOK2019 解决 无法验证您连接到的服务器使用的安全证书
在配置好Outlook后,每次打开Outlook,都会弹框提醒“无法验证您连接到的服务器使用的安全证书”,网上搜的很多办法都无法解决,最后在微软的官方解答中找到了解决方案,分享给大家! 打开Out ...
- IEnumerable、IEnumerator、ICollection、IList、List的继承关系及简单使用
IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单的迭代,IEnumerable和I ...
- C# string contains 不区分大小写
一种方法是把字符串转成小写/大写,然后包含的字符串也写成小写 /大写 另一种方法是: 1 string title = "STRING"; 2 bool contains = ti ...