干货:用技术分析致敬老牌开源社交平台ThinkSNS
自高中时代起,我便踏上了SNS社交的征程。在这七八年的时间里,我全身心投入其中,体验了欢笑、辛勤的付出,以及偶尔的失落。外出时,我会捕捉一些SNS社交的瞬间;遇到不良社会现象,我会在SNS社交平台上果断曝光;内心有所波动,我也会在SNS社交圈中倾诉,以舒缓情绪。逐渐地,我养成了在社交平台上搜寻意外惊喜的习惯,从文采飞扬的社交圈中领略文艺气息,从科技巨头的社交圈中获取行业资讯和前沿知识。在这些社交平台中,我最初接触的开源社交系统是基于web2.0技术开发的ThinkSNS。
经过一番网络搜索,我发现诸如知乎等平台关于ThinkSNS的专业技术资料并不多见,众多程序员在寻找相关技术文档时常常感到困惑。鉴于此,我撰写了这篇关于ThinkSNS技术的文章,旨在与众多热爱ThinkSNS的创业人士进行交流,并分享我在技术领域的个人观点。
一、我们常说的TS是什么?
首先,让我们了解一下TS的含义,它代表“ThinkSNS”,是这款软件的简称。那些热衷于使用TS程序的用户,我们通常称之为TSer。TS是一款开源软件,其代码被托管在GitHub上,所有的细节修改都进行了透明化的更新。
用户能够通过访问官方网站、官方演示社区(简称Demo站)以及GitHub存储库来获取TS的最新开发信息。当然,如果您有意愿,还可以向TS开发团队提交代码Pull request(简称PR)。一旦开发人员收到代码,若其符合开源标准,便会将其纳入TS的版本中。而对于普通用户遇到的问题,他们可以在Demo站或GitHub上提交问题报告(Issues),这些都会得到开发团队的集中解答。
TS对PHP的版本要求设定得相对宽松,但多数行业已经进入了php5.5或php5.6的行列。然而,鉴于我国众多小众虚拟主机服务以及不少人对相关技术知识不够了解,TS特意将PHP版本限制在了php5.3.12。有人好奇为何选择的是12这个版本,实际上,它是php5.3系列中的首个稳定版,意味着在此之前的版本并不稳定,因此并不建议安装或使用。
二、Laravel框架Eloquent ORM 与TP框架
在2016年的开发阶段,TS经历了较为显著的底层架构调整。大家普遍知道,TS的底层架构是在ThinkPHP框架的基础上进行了二次开发,而用户无法直接基于ThinkPHP对TS进行升级,这其中的一个关键原因在于TP框架并不完全遵循MIT开源协议。此外,对于开发者而言,TP框架的技术架构本身也存在不够先进和过于抽象的问题。因此,经过全面考量,TS在处理数据交互的过程中,采纳了Laravel框架中的Eloquent对象关系映射(ORM)技术。
Eloquent ORM有哪些优点?它对数据的处理方式与Node.js相似,即所有操作都围绕对象展开。此外,这款ORM在处理数据关系上的效率也不亚于doctrine,这正是TS做出这一选择的关键。当然,我们更多的是为了未来可能出现的更高级架构而提前布局。TS将逐步过渡至采用扩展型开发模式,同时会对TS程序进行整体架构的调整和数据交换的优化处理。
引入了新的ORM后,TS开始思考如何在php7平台上运行,然而php7已经彻底移除了MySQL的连接方法,仅支持PDO和MySQLi。因此,若要在php7环境中顺利运行,DB类必须进行相应的调整。然而,由于兼容性的考量,目前旧的应用程序依然采用model生成SQL语句,随后由PDO负责执行这些语句。而新开发的应用和功能均使用全新的ORM做的数据开发。
三、TS技术优势与拓展
TS除了采纳了新颖的ORM之外,还具备众多技术上的优势,其中包括:其基类设计得更加易于理解和融入。这些基类是在借鉴第三方库内容的基础上,进行了二次包装,从而使得TS在模块开发时设置的属性更加规范,同时也降低了新手的入门难度。毕竟,若开发者需自行整合第三方库中的继承等功能,鉴于我国国情,这几乎是一项难以实现的任务。在此基础上,开发者仅需浏览基类,便可明了集成后应进行哪些操作,无需额外学习第三方类的知识。
在TS的最新扩展(目前主要应用于实践)中,原先的静态资源是直接引用应用内部的资源。然而,在新的架构体系下,TS的应用程序将被集中迁移至一个公开的缓存文件夹,这样的布局旨在便于外部的访问。这种设计理念的初衷,是为了提升TS的安全性。用户能够在不泄露代码内容的情况下获取应用内嵌入的静态资料,同时,网站管理员或开发者能够更稳妥地将非公开的代码隐藏在公开目录的深层位置。
关于TS究竟具备哪些独特的功能与亮点,众说纷纭,各执一词。它汇聚了众多功能于一体,不仅涵盖了社交的核心特性,还整合了微吧、频道、资讯、活动以及商城等多种功能模块。此外,TS还与众多不同行业的合作伙伴推出了特色产品,具体如图所示。
四、聊天和风向才是社交的核心
TS自主研发了其独有的即时通讯平台。众所周知,社交的精髓在于沟通与风向。在个人电脑上,TypeScript通过JavaScript轮询功能执行消息接收等操作;而在移动设备上,TypeScript采用了更为先进的技术手段——Socket技术。为了确保用户数据不会丢失,它摒弃了P2P的点对点传输方式。程序设计为一个客户端向服务器发送数据,服务器再将消息转发给另一个客户端,并在数据库中记录,从而实现了多端数据同步到达的目标。
五、TS中基础的技术要点
分析若缺乏实质内容,便如同无本之木。接下来,我将详细阐述TS中的核心技术要点。在TS中,每个应用都配备了一个配置文档,当前应用的存放路径位于“apps/”目录下。因此,该配置文档的路径为:“apps//manage.json”,并附有相应的示例代码。
观察之下,可以发现这属于较新的应用设置。在旧版本的应用中,仅需对“resource”进行配置。完成这一步骤后,静态资源便会存储于“storage/app/”路径下。若开启了开发者模式,每次访问时资源都会被移至此处。因此,可以说“storage/app”目录是一个公开的暴露目录。
要达成前述目标,便有必要提及一种新型的应用安装模块,其命名空间为TS\Helper\AppInstall。该模块对新的应用机制进行了多项处理,目前主要涉及静态资源缓存。此外,应用的执行器同样位于此命名空间内,具体为“TS\Helper\Controller”这一即时执行器。使用时,只需提供应用名称、控制器名称以及动作名称,执行器便会通过Composer查找应用所注册的命名空间,进而运行相应的控制器代码。
谈及此处,必须强调一项关键的技术补充——Composer这款包管理软件。在众多语言的包管理工具中,Composer堪称佼佼者,它不仅实现了第三方包的标准化集成、更新和卸载,还配备了遵循PSR-0及PSR-4规范的AutoLoader工具。这便意味着在TS中,我们无需再依赖多余的自定义自动加载功能来搜寻所需的类文件和库文件,而是可以直接通过Composer进行注册。以下,我们用一个极为简单的示例来加以阐释:
据我所知,TS开发团队正在打造一款全新的Web Application应用,该应用的关键代码存放在“apps/src”目录中。那么,TS究竟是如何定位到类自定义目录的呢?这涉及到应用所设定的命名空间。实际上,应用对命名空间并无特定要求,但控制器(Controller)的命名空间必须遵循“App\”这一规定。这样的设定是为了便于通过URL参数定位到应用的控制器。当然,这种规定只是暂时的。在未来的TS开发中,将不再有命名空间等技术的限制。开发者只需调用路由器来注册控制器,无需TS主动搜索控制器。此外,所有使用到的资源都需要预先注册,这符合当前先进的技术标准。
言归正传,TS怎么找到 Controller的呢?
实际上,TS所执行的操作相当简便,只需创建一个名为“App\\”的类,并对其进行实例化。值得注意的是,这个类在应用开发过程中,是通过Composer进行注册并加入了自动加载的机制中。该应用遵循PSR-4标准,因此代码可以存放在任一目录中,而不仅限于src目录。对于TypeScript程序而言爱游戏app官方网站登录入口,src目录是陌生的,但Composer对此了如指掌。因此,TypeScript只需向Composer发起查询,即可获取所需信息。
引入这项新技术不仅大幅减轻了开发负担,还让TS代码变得更加简洁易读。这样一来,我们无需关注与TS代码无关的细节,只需集中精力完成自身代码模块的开发工作。因此,尽管TS的代码包去除了第三方库,其体积从去年的24MB降至目前的21MB,但依旧显得较为庞大。这主要是因为TS在采纳新技术的同时,还需兼顾旧模块的运行需求。目前,我们尚无法对全部旧模块进行重新开发,毕竟这样做并无实际必要。毕竟,我们总不能因为孩子长得不好看就将其塞回去,重新生一个吧!
在TS中,重点转向了ORM(对象关系映射)的引入,此时我们应如何运用新的数据模型呢?以下是一段基础性的继承代码示例:
没错,若添加注释,篇幅不过二十行,那么与先前的模型有何不同呢?首先,区别在于参数传递方式的改变,对象关系映射(ORM)允许在MySQL、SqlLite、SQL server等多种数据库间灵活切换。其次,区别还体现在定义关键词的变更,一旦模型被定义,便可以频繁地对表进行操作,操作过程是否显得相当简便?在上述表格中,要查找feed_id等于1的记录,操作十分简便,只需执行Feed::find(1)。好的,查询操作已经顺利完成。当然,查询结果会返回一个对象,而非仅仅是数据的数组。
若你意图将其转化为所需的数组形式,例如,若$feed代表上述查询所输出的数据,那么只需执行$feed->toArray操作即可实现。若我们掌握了表格的字段信息,便能够将查询结果直接以对象成员的方式访问,例如通过$feed->feed_id或$feed->cTime进行读取;同时,我们还能将此对象直接用于foreach循环,以遍历其属性。由此可见,相较于以往,新的ORM在处理数据时无需再进行数组操作,然而在遍历等操作方面,我们仍可维持原有的方式。
当然,若想深入了解其具体应用,不妨查阅Laravel框架的官方文档。此外,这里再以ORM中关系为例进行说明。
public function phone
此方法返回一个与Phone模型关联的单个Phone实例。
在上述方法中,我们定义了一个特定方法,通过这种方法,我们实现了与Phone模型的一对一关联。例如,当我们执行$phone = Feed::find(1)->phone时,我们便能够获取到与feed表具有相同值的phone主键feed_id,进而得到相应的表对象。这样的操作过程,您觉得是否简便易行呢?
关于controller的细节,我还要补充一点。在TS框架中,我创建了一个名为“TS\Base\NoneController”的基类。在你的控制器目录中,你需要定义一个名为“App\\Controller\None”的控制器,并使其继承自NoneController。这样一来,当你的应用尝试访问一个不存在的控制器时,就会自动跳转至这个继承自NoneController的控制器。所以爱游戏app官方入口最新版本,你可以用这个东西拓展出很多意想不到的方法。
六、ThinkSNS不仅仅是开源,也是创业加速器
我无法确定大家是否真正通过这篇文章的阐述对TS有了深入的认识,然而这仅仅是TS众多内容中的一小部分,尽管如此,它同样不容小觑。
TS一直在成长,尽其所能的为创业者添动力加速度。
TS架构设计领先,遵循PSR编码标准,操作简便爱游体育app下载官网,兼容性强,创业者能够迅速掌握并利用TS来满足其业务需求,开发者也能在短时间内轻松上手。
对技术人员和创业者而言,时间堪称最宝贵的开销,而ThinkSNS所追求的愿景和宗旨,便是希望创业者与开发者能够将主要精力投入到他们分内之事。
最终,身为TS的忠实粉丝,各位读者请接受这份惊喜:ThinkSNS官方举办了一场促销活动,推出了新款产品,听说分享信息还能获得礼品,推荐购买还能获得iPhone7作为奖励。以下是活动链接:
ThinkSNS社交系统4.2版本,推出前所未有的五大主题活动,助力创新创业加速发展!