阅读更多

4顶
1踩

开源软件

原创新闻 Java 实时论坛 - Sym 1.3.0 发布

2015-10-08 10:39 by 见习编辑 88250 评论(5) 有6555人浏览

简介

Sym 是一个用 Java 写的实时论坛,欢迎来体验

初衷

Sym 的诞生是有如下几点原因:

  • 我们想实现一种新的网络社区体验,独立博客+社区互动
  • 大多数论坛用户体验不够现代化,想做一个和聊 QQ 一样体验的论坛
  • 已有的用 Java 写的论坛真的很少/丑,并且大多已经不再维护

基本理念

实时交互

在浏览帖子时,传统论坛都是需要刷新页面来查看回帖的。Sym 在类似的用户交互场景上是基于 WebSocket 技术进行架构的,看帖时不需要刷新页面也可以看到其他人回帖。

HTML5

Sym 使用了很多 HTML5 提供的技术特性,比如通过使用本地存储防止编辑帖子/评论时内容丢失;使用了音频特性来进行帖子/评论音频录制;复制/粘贴上传图片等等。

运用这些技术,Sym 可以让用户在分享、灌水时更加便捷、舒服 :smirk:

积分系统

积分系统是所有论坛的基础/标配系统之一吧,好玩是一方面,另一方面是量化每个用户的价值。Sym 的积分系统参考了 V2EX 的积分系统,未来将会加入更多动态特性,比如用户阵营汇率、系统运营参数等。

互联

Sym 提供了 API 进行帖子、评论的同步(B3log 构思),目前 Solo 博客系统已经可以完整和 Sym 保持内容同步。

功能图解

首页

首页使用 Reddit 热帖排序算法,基于用户投票和时间来决定首页内容。另外,列表上面的每篇帖子都有一个小红条,表示该帖的当前热度(实时浏览/评论)。

首页

帖子

帖子

个人设置

个人设置

发布选择

目前有 4 类帖子:

  • 文章:普通的帖子,注重作者分享经验和见解
  • 思绪:记录写作过程,实例请看这里
  • 讨论组:邀请好友进行私密交流,其他用户看不到具体内容和评论
  • 同城广播:发起你所在城市的招聘、Meetup 等

发布选择

发布编辑

  • Markdown 编辑器
  • Chrome 下可以直接粘贴图片,其他浏览器支持拖拽
  • 除了使用文字,也可以在帖子内一键进行录音
  • 支持标准 Emoji 表情
  • 积分打赏

发布编辑

移动端

移动端目前除了不能录音外,其他功能和 PC 端保持一致。

首页

移动端首页

浏览帖子

移动端浏览帖子

评论区

移动端评论区

发布

移动端发布

安装

需求:Maven3+、MySQL5+、Jetty9+

  1. 下载源码
  2. 解压后修改 src/main/resources/local.properties 中的数据库配置,并创建数据库
  3. 可能需要修改 latke.properties 中的端口为容器端口
  4. 可能需要修改 init.properties 中的管理员账号
  5. 使用 mvn install 进行构建
  6. 部署到 Servlet 容器的 ROOT 下并启动容器,数据库表会在第一次启动时自动建立

注意:

  • 只能部署到 ROOT 中,线上环境建议使用反向代理

配置

  • 图片上传使用的是七牛,需要配置 symphony.properties 中的 qiniu.* 属性
  • 邮件发送使用的是 SendCloud,需要配置 symphony.properties 中的 sendcloud.* 属性

用户注册时是启用邮件验证的,如果需要修改请参考相关代码。

商用授权

请看这里

思绪

在实现 B3log 构思的这几年:

  • 我们见证了 xAE(GAE/BAE/SAE/etc)的兴起与没落。2009 年选择了 GAE 作为服务器,并开始实现 Latke 框架来解决跨云平台,直到今年告别 GAE,不得不感叹技术更迭之快
  • 感受到了自造轮子的优缺点,并且可以肯定一点:对于一个想要长久的产品来说,自制技术框架优势远大于劣势
  • 一个好玩的产品或说是细节特性然并卵,需要做的是一个能够持续提供用户价值的产品/特性
  • 虽然直到目前 B3log 系产品用户不多,但我们已经初步证明了:Java 用来实现博客、论坛没有什么不好的(仅次于 PHP 吧)
  • 先完成本职工作,再用开源的产品/经验来进行工作相关结合与提升
来自: 黑客派
4
1
评论 共 5 条 请登录后发表评论
5 楼 88250 2015-10-18 09:02
henryxlx 写道
使用GAE就是个错误,浪费了几年的时间和资源。为什么有了轮子还要重新发明轮子,要根据自己的要求从基础做起,自主研发!


不知所云。。。。
4 楼 henryxlx 2015-10-17 20:54
使用GAE就是个错误,浪费了几年的时间和资源。为什么有了轮子还要重新发明轮子,要根据自己的要求从基础做起,自主研发!
3 楼 feixue2011 2015-10-10 15:49
好 加油!一直想用java程序的博客和论坛
2 楼 hottymg 2015-10-09 10:45
  
1 楼 XTU_xiaoxin 2015-10-09 08:41
挺好的,加油!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 网络数据包分析工具的设计与开发

    摘 要当前,随着信息化发展,网络安全问题日渐突出,网络攻击日益泛滥,所以网络信息安全就变的非常重要。网络主机必须有足够的安全措施,否则网络的价值就会贬值。本系统的开发就是为了给网络使用者提供一个有用的网络数据包分析工具。本系统有四个主要功能:数据包的捕获、数据包解析、数据包信息分析和数据包信息的显示。为了实现系统功能,本系统选择在ubuntu(Linux)、libpcap、apache、mysql和php的平台上开发,操作系统和软件开发包全部为开源免费的软件,这也是本系统的一个重要特点。本系统首先用lib

  • 数据包的协议封装设计和后台运行功能

    这一个传输命令的过程中,是从应用层的报文下来的,而我建立连接是TCP连接,TCP面向字节流,容易出现粘包的问题。我采用的这个就很好的解决的粘包的问题。即使从键盘输入的一个字符,占用一个字节,可能在传输上造成41字节的包,其中包括1字节的有用信息和40字节的首部数据。这种情况转变成了4000%的消耗,这样的情况对于重负载的网络来是无法接受的。所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。最后的和校验是保证数据的完整性。

  • 【网络编程】设计一个数据包

    设计一个数据包

  • C# 优雅的为Tcp客户端设计心跳数据包

    心跳机制是定时发送一个自定义的 结构体 (心跳包),让对方知道自己还活着,以确保连接的有效性的机制。 网络中的接收和发送数据都是使用操作系统中的 SOCKET 进行实现。 但是如果此 套接字 已经断开,那发送数据和接收数据的时候就一定会有问题。 可是如何判断这个套接字是否还可以使用呢? 这个就需要在系统中创建心跳机制。 其实TCP中已经为我们实现了一个叫做心跳的机制。但是该机制受限于操作系统,而且很容易误报。所以很少被大家使用。大家使用最多的,就是自己设计数据包,然后预留心跳格式,当对方收到心跳包时,直接返

  • 数据包格式设计

    自定义的数据包格式

  • 5.2.2数据包设计

      在客户端和服务器之间传递的数据有算数表达式和消息两种类型。为了识别数据类型,在发送的数据中增加包头。根据包头中的数据类型字段,判断数据是算数表达式还是消息。数据包格式如图所示。包头由数据类型和数据长度组成,共占4个字节。数据类型1个字节。数据长度2个字节。数据长度是指整个数据包的长度。数据类型和数据长度之间的一个字节为没有使用。客户端发送简单的算术表达式,该表达式规定为“数

  • 数据包协议设计(通讯协议的设计)

    一、为什么要设计通讯协议 通常,多设备之间进行通讯多使用数据包的方式。 如何从一堆的数据中确定哪些是有效数据,以及这些数据要表达什么意思。 为解决这些问题,通常我们需要设计一个通讯协议,依照通讯协议对数据进行解析,就能够正确的找到并使用这些数据。 二、通讯协议的一般格式 帧头 帧序号 帧命令 帧长度 帧数据 校验字 帧尾 HEAD FRAME_SEQ CMD DATA_LEN

  • 【小迪安全学习笔记】基础入门-数据包拓展

    #Request 请求数据包 #Proxy 代理服务器 #Response 返回数据包 HTTP/HTTPS具体区别? HTTPS具有加密,在访问速度上HTTPS要慢。 HTTP简要通信过程 建立链接 —> 发送请求数据包 —> 返回响应数据包 —> 关闭连接 1.浏览器建立与web服务器之间的连接。 2.浏览器将请求数据打包(生成请求数据包)并发送到web服务器。 3.web服务器将处理结果打包(生成响应数据包)并发送给浏览器。 4.web服务器关闭连接。 Request请求数据包数据格

  • 2021-09-06

    基础入门-数据包拓展 HTTP/HTTPS 具体区别?(Https更加安全) Request 请求数据包数据格式 1.请求行:请求类型/请求资源路径、协议的版本和类型 2.请求头:一些键值对,浏览器与web 服务器之间都可以发送,特定的某种含义 3.空行:请求头与请求体之间用一个空行隔开; 4.请求体:要发送的数据(一般post 提交会使用);例:user=123&pass=123 请求行:请求行由三个标记组成:请求方法、请求URL 和HTTP 版本,它们用空格分享。 例如:GET /in

  • 【小白渗透入门系列】P2 渗透测试_基础入门_数据包扩展

    大家好! 我是小黄,很高兴又跟大家见面啦 ! 拒绝水文,从我做起 !!!! 今天更新的是: 02 渗透测试_基础入门_数据包扩展 往期检索:程序设计学习笔记——目录 创建时间:2021年3月1日 软件: MindMaster Pro 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。 02 渗透测试_基础入门_数据包扩展01 网站解析对应:02 HTTP/S数据包:1. 网站直接链接到服务器:2. 网站经过代理再链接到服务器:3. HTTP和HTPPS:3.1 HTT

  • 网络游戏中的数据包设计与定义(初论)

      接触了一段时间的网游封包设计,有了一些初步的思路,想借这篇文章总结一下,同时也作个记录,以利于以后更新自己的思路。  网络游戏的技术研发,分为三个主要的方面:服务器设计,客户端设计,数据库设计。而在服务器和客户端之间实现游戏逻辑的中介则是游戏数据包,服务器和客户端通过交换游戏数据包并根据分析得到的数据包来驱动游戏逻辑。网络游戏的实质是互动,而互动的控制则由服务器和客户端协同完成,协同就必然要依

  • HTTP协议数据包简单总结

    HTTP协议是什么 由w3c制定的一种网络应用层协议,定义了浏览器与web服务器之间通信时所使用的数据格式。 通信过程 1.浏览器建立与web服务器之间的连接 2.浏览器将请求数据打包(生成请求数据包)并发送到web服务器 3.web服务器将处理结果打包(生成响应数据包)并发送给浏览器 4.web服务器关闭连接 总结: 建立连接——>发送请求数据包——>...

  • 数据包的构建和设计(一)

    数据包的构建和设计(一)网络数据报捕获开发包Libpcap的安装:1.  实现虚拟机和主机之间的通讯;2.  在主机利用Serv-U搭建FTP服务器;注意:权限Privilege设为System Administrator3.  解压缩libpcapLinux下新建文件夹zhouxin------mkdir zhouxin进入该目录---------cd zhouxin

  • python设计tcp数据包协议类

    一.问题描述     在tcp编程中,最需要解决的就是粘包分包问题。所以,我们需要在每个数据包前面加上数据包的长度用以分割粘连的包。   二.包结构的设计     包的组成:包长度+数据域      包长度:用4个字节存储数据域长度,数据域长度即为其所占字节数     数据域:由若干个变量组成,如果是定长变量则不用加变量长度     定长变量:我们人为规定,传输中的int为4字节定长...

  • 自定义数据包协议

    自定义数据包协议代码地址https://github.com/csy512889371/learndemo/tree/master/netty/packageProtocol粘包 分包两条消息give me a coffee give me a teagive me a coffeegive me a tea 粘包现象give me a coffeegive me a tea 分...

  • 基础入门-数据包扩展

    5. 基础入门-数据包扩展 http基础 1.随着web2.0的时代的到来,互联网由c/s架构转变为b/s(浏览器/服务器)架构 2.http:超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,他是万维网交换信息的基础,他允许将HTML文档从web服务器传递到web浏览器 3.Url(统一资源定位符)也被称为网页地址,url的标准格式为: 协议://服务器ip[端口]/路径/[?查询] 4.http是一种无状态的协议,无状态是指web浏览器与web服务器之间不需要建立持久的连接,ht

  • 数据包扩展

    数据包基础(网络安全笔记第一天) 学习内容: 1、HTTP,HTTPS 2、 HTTP/HTTPS的区别 3、 Request请求数据包格式 4、Responese返回包格式 5.HTTP的8种请求方法 6.HTTP响应码 1.HTTP/HTTPS数据包传输流程 在正常情况下访问为下图,浏览器对web server发送Request请求包,当web server收到之后,web server向浏览器发送Response返回数据包 但是有正常就有不正常,有时我们因为需要要设置代理(poxy).有代理时如下

  • TCP聊天室02 通信协议数据包的设计

    //Msg.h#pragma once #include <windows.h> #pragma comment(lib,"Ws2_32.lib") //******************************************************************** //Part1:消息结构体定义 //取结构体某个字段的偏移量 //思路:将址址0x000000...

Global site tag (gtag.js) - Google Analytics