精华内容
下载资源
问答
  • 源代码是构成网站的核心,即网站程序代码,包括网站文件及目录结构,...而开放源代码的建站是用户拥有网站的所有权,是买卖关系而不是租用关系,用户可以将网站程序(源代码)安装到自己指定的服务器,而不受平台限...

     

    源代码是构成网站的核心,即网站程序代码,包括网站文件及目录结构,拥有源代码才拥有网站的全部。

    源代码决定网站的所有权,传统自助建站因其SAAS模式无法开放源代码,用户实质上是每年支付租金租用放在平台网站的使用权,哪一天不交租金了,网站也就没有了;而开放源代码的建站是用户拥有网站的所有权,是买卖关系而不是租用关系,用户可以将网站程序(源代码)安装到自己指定的服务器,而不受平台限制。

    米拓建站:网站开放源代码是什么意思? idc资讯 第1张

    某种意义上,可以通过是否开放FTP来确定是否开放源代码,开放FTP意味着可以随时拿到网站源代码程序。

    开放源代码就是提供网站程序的所有代码给用户,用户获得源代码后可以自行进行二次修改(也可以找其他专业的公司进行修改),同时可以将网站安装到任意具备系统运行环境的服务器(如米拓企业建站系统,需要PHP+MYSQL运行环境)。开放源代码可以让网站更具有自主性,未来的改版、网站推广、服务器选择等非常方便,对于专业建站而已,开放源代码是非常必要的。

    米拓建站定位为中高端建站,拥有自助建站、模板建站的快捷方便性,同时又拥有定制网站的纯手工制作特征和开放源代码;米拓建站可以“用租房的价格买房”搭建网站,相信消费者的眼睛是雪亮的,欢迎登陆https://www.metinfo.cn/product/免费试用。

    https://www.ysidc.top 云速博客,数据库,云速,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top

    展开全文
  • 这是与Jason Lengstorf一起有关无服务器功能的前端大师课程的源代码。 现场直播! 我们将在本研讨会中学到的主要知识 “无服务器”是什么意思? 如何使用无服务器功能加载数据 如何保护前端应用程序中的私人凭据 ...
  • { /* 键值代码数组 对应键位: */ // 0x70,0x71,0x72,0x73,0x74,0x75, /* 7 8 9 A TRACE RESET*/ // 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5, /* 4 5 6 B STEP MON */ // 0xd0,0xd1,0xd2,0xd3,0xd4,...
  • 回顾一下之前所新建的SVN仓库 ...从上图中我们可以清楚地看到taotao-javaee仓库下有三个空的文件夹,它们分别是branches、tags以及trunk,你不仅就要问了,这三个文件夹分别代表什么意思呢?下面我就来告诉大家,如有

    回顾一下之前所新建的SVN仓库

    在上一讲中,我们一起学习了如何来安装SVN服务器并且新建了一个名称为taotao-javaee的空的仓库,如下图所示。
    在这里插入图片描述
    从上图中我们可以清楚地看到taotao-javaee仓库下有三个空的文件夹,它们分别是branches、tags以及trunk,你不仅就要问了,这三个文件夹分别代表什么意思呢?下面我就来告诉大家,如有讲得不好的地方,还请指出,大家可以一起讨论。

    branches

    branches文件夹代表的是分支。如何理解分支这一概念呢?举个例子,我们在开发项目时往往会分版本,比如1.0、2.0之类的,当我们开发完1.0版本之后,往往就要拉一个分支出来,这时主干继续开发2.0版本。但是1.0版本上线之后肯定会遇到一些bug,遇到bug我们肯定要处理啊,那么我们在哪儿进行处理呢?答案是在分支上,因为主干上的代码加入了很多新特性,还未经过详细测试,不稳定性比较高,而分支上的代码是旧的代码,并没有加入新特性,因此改动起来更简单也更稳定些。当然了,在分支上改完之后,肯定要把分支上修改的代码合并到主干上来,因为我们不能让1.0版本的bug在2.0版本再重现。如果修复的是1.0版本的bug,那么修改完之后新建版本应该是1.1、1.2、1.3等等。

    tags

    tags文件夹代表的是标签,它主要是记录一些关键时间点,比如某个版本发布的时间,某个大的bug修改的版本等,我们在tags做下标记,这样方便我们根据标签找回我们想要的以前某个版本的代码。

    trunk

    trunk文件夹代表的是主干,它是我们平时开发所在的目录,也就是说在正常情况下,我们开发的代码应放在主干这儿。

    主干的代码始终是最新的,版本也是不稳定的,需要经过多轮测试才能验收通过,这时再新建分支,然后接着开发新的版本。

    你有可能对于这句话,不是那么的很明了,接下来,希望通过我比较通俗的话语可以让你理解得更加的深刻。举个例子,比方说我们开发一个项目,就拿淘淘商城这个项目来说,该淘淘商城项目有不同的版本进行迭代,例如taotao v1.0taotao v2.0taotao v3.0、······,这些不同的版本是主干上的版本。当我们开发出来taotao v1.0这个版本之后,就得发布一版。接下来,我们就要继续开发taotao v2.0这个版本了,这个时候我们依然是在主干上进行开发的。那么好了,现在taotao v1.0这个版本有bug了,改不改呢?那当然得改了,改的时候,能在主干上改吗?答案是不能。这个时候,主干已经开发完taotao v2.0这里面的功能了,你即便是在taotao v2.0这个主干上改完了,你也不能进行发布。因为taotao v2.0增加了一些新的功能,可能都还没有进行测试,这个时候,你再重新发布,那就肯定会包含一些有问题的功能点,所以,你不能在主干这儿改。

    taotao v1.0这个版本一旦发布了之后,你就应该建一个分支(branches),然后主干继续向前开发。如果分支这里面有bug,那么就在分支里面进行修改,这样势必就会出现taotao v1.1taotao v1.2taotao v1.3等这些小版本号。在分支里面改完bug之后,要不要合并到主干呢?这肯定要合并到主干,因为你都知道有bug了,难道主干就不改了吗?难道你还能把这个bug带到taotao v2.0版本中吗?所以你得把分支里面修改的内容合并到主干,这样保证我们主干里面的内容是最新的。我们主干一旦把taotao v2.0这个版本开发完,并且测试完之后,再为该版本建一个分支,接着继续开发taotao v2.0这个版本。

    由于我们现在还处于开发项目的过程中,所以我们应该把代码上传到trunk主干之上。

    上传代码

    要向SVN服务器上传代码,首先我们需要知道上传的地址,如何获取要上传的地址呢?很简单,方法是在trunk文件夹上右键,再在其子菜单中点击Copy URL to Clipboard,如下图所示。
    在这里插入图片描述
    粘贴我们刚才复制的URL到记事本上,你便可以看到https://liayun:8443/svn/taotao-javaee/trunk这样的一个URL,它是以https开头的,也就是安全模式,https默认的端口号是433,如果本地有进程占用了433端口请先关掉那个进程。

    上传代码秉承先独立后依赖的原则。比方说,taotao-parent就是个独立的工程,它并没有依赖任何别的工程,因此我们便先上传它,然后taotao-common工程只依赖了taotao-parent,而其他工程都依赖于它,因此第二个便上传taotao-common工程,接着taotao-manager工程依赖于taotao-common,因此我们第三个便上传taotao-manager工程,这里值得说明的是,由于taotao-manager是个聚合工程,它聚合了下面四个子工程,因此我们只需要上传taotao-manager工程即可,不用再单独上传它下面的四个子工程。最后我们上传taotao-manager-web工程。

    上传taotao-parent工程的代码

    第一步,我们在taotao-parent工程上右键,然后在其子菜单中选择Team,接着再在其子菜单中点击Share Project...,如下图所示。
    在这里插入图片描述
    第二步,弹出如下窗口,并在窗口中选择SVN,然后点击Next按钮。
    在这里插入图片描述
    第三步,我们可以看到如下图所示的窗口,在该窗口中,我们选择使用默认的创建新的资源库位置,然后点击Next按钮。
    在这里插入图片描述
    第四步,我们会看到如下图所示的窗口,然后在URL一栏中输入我们上面复制过来的URL,然后点击Next按钮。
    在这里插入图片描述
    第五步,在弹出的如下窗口中,我们使用默认配置即可,然后点击Finish按钮。
    在这里插入图片描述
    第六步,此时,会弹出如下窗口,让我们输入SVN的用户名和密码,输入完之后,记得勾选保存密码前面的框框,然后点击OK按钮。
    在这里插入图片描述
    第七步,此时我们会看到如下图所示的窗口,点击Yes按钮即可。
    在这里插入图片描述
    第八步,此时,我们会进入同步视图,在同步视图中我们可以看到本地和服务端的差异。
    在这里插入图片描述
    第九步,我们在上传文件前需要先排除不需要上传的文件,比如.settings文件,我们就不能上传到服务端,因为每一个人的本地的配置都有一个.settings,并且都不一样,如果你传上去,别人一更新,那么你的.settings就会覆盖他本地,可能就造成这个工程坏了,各种各样奇怪的问题都会随之出现,所以最好不要把.settings传上去,也就是说这个时候.settings就需要被忽略。

    那么如何忽略该文件呢?我们可以在其上右键,并在右键菜单中点击添加至svn:ignore(D),如下图所示。
    在这里插入图片描述
    然后,我们会看到如下图所示的窗口,点击OK按钮即可。
    在这里插入图片描述
    接着,我们就可以看到我们的taotao-parent工程已经没有.settings文件了。
    在这里插入图片描述
    以上这种方式只针对当前文件有效。其实,忽略某些文件还有另外一种方式,即配置忽略规则,这种方式更好一点。

    那么如何来配置忽略规则呢?首先,点击Eclipse菜单栏中的Window菜单,在其下拉列表中选择Preferences,如下图所示。
    在这里插入图片描述
    然后,弹出如下窗口,并在该窗口的左侧找到Team,在Team下有一项Ignored Resources,我们点击它,在右侧可以看到当前默认添加的忽略的资源,还可以看到,其中并没有忽略.settings文件和.project文件,因此我们需要把这两个加到这里面来。
    在这里插入图片描述
    接着,我们点击Add Pattern...按钮,会弹出添加忽略格式的窗口,我们在输入框中输入.settings,然后点击OK按钮,如下图所示。
    在这里插入图片描述
    添加完.settings之后,我们再来添加.project,这时我们可以看到在忽略的资源当中已经有我们刚才输入的.settings和.project了,紧接着,依次点击ApplyOK按钮。
    在这里插入图片描述
    最后,忽略完.settings和.project这两个文件之后,我们可以看到工程下已经没有他俩了,而且这样做,以后其它项目在提交的时候也会自动忽略掉.settings和.project这俩文件。
    在这里插入图片描述
    第十步,我们开始把taotao-parent工程的代码上传到服务器。首先右键taotao-parent工程,然后在其子菜单中点击提交(C),如下图所示。
    在这里插入图片描述
    正式提交前需要写下提交的内容,如下图所示,然后点击OK按钮。
    在这里插入图片描述
    提交完taotao-parent工程的代码之后,我们来看下SVN服务器上是否已经有我们刚才上传的工程了,刷新一下trunk文件夹,发现它下面确实出现了taotao-parent工程,这已然说明taotao-parent工程的代码上传成功了!
    在这里插入图片描述
    接下来,我们来上传taotao-common工程的代码。

    上传taotao-common工程的代码

    第一步,我们在taotao-common工程上右键,然后在其子菜单中选择Team,接着再在其子菜单中点击Share Project...,如下图所示。
    在这里插入图片描述
    第二步,会弹出如下窗口,然后在窗口中选择SVN,接着点击Next按钮。
    在这里插入图片描述
    第三步,由于我们已经上传过taotao-parent工程的代码了,因此我们使用已有的资源库位置即可,然后点击Next按钮。
    在这里插入图片描述
    第四步,我们会在弹出的如下窗口中看到URL就是我们想要上传的地址,因此我们不用做任何修改,直接点击Next按钮即可。
    在这里插入图片描述
    第五步,上传前最好写上我们都进行了哪些操作,然后点击Finish按钮。
    在这里插入图片描述
    第六步,此时会让我们确认是否进入同步视图中,点击Yes按钮即可。
    在这里插入图片描述
    第七步,展开taotao-common工程,可以看到一个.classpath文件,该文件并不需要上传到服务端,因此我们需要忽略掉它。

    那么如何忽略掉该文件呢?上面我已经讲过一遍了,这里我再不厌其烦讲一遍。首先,点击Eclipse菜单栏中的Window菜单,在其下拉列表中选择Preferences,如下图所示。
    在这里插入图片描述
    然后,会弹出如下窗口,并在该窗口的左侧找到Team,在Team下有一项Ignored Resources,我们点击它,在右侧可以看到当前默认添加的忽略的资源。
    在这里插入图片描述
    从以上窗口中,我们还可以看到,其中并没有忽略.classpath文件,因此还需要把它加到这里面来。这时,我们需要点击Add Pattern...按钮,会弹出一个添加忽略格式的窗口,并在输入框中输入.classpath,接着点击OK按钮,如下图所示。
    在这里插入图片描述
    添加完之后,我们可以看到忽略列表当中已经有我们刚才输入的.classpath了,最后点击OK按钮。
    在这里插入图片描述
    第八步,现在taotao-common工程剩下的目录都我们需要上传。首先选中所有目录然后右键,接着在其子菜单中点击提交(C)
    在这里插入图片描述
    提交前输入我们本次要提交的内容信息,然后点击OK按钮。
    在这里插入图片描述
    提交完taotao-common工程的代码之后,我们来看下SVN服务器上是否已经有我们刚才上传的工程了,刷新一下trunk文件夹,发现它下面确实出现了taotao-common工程,这已然说明taotao-common工程的代码上传成功了!
    在这里插入图片描述
    温馨提示:我们可以点击如下同步(刷新)图标来更新代码,然后点击Java EE图标返回工程目录。
    在这里插入图片描述
    接下来,我们来上传taotao-manager工程的代码。

    上传taotao-manager工程的代码

    前面我们已经上传了两个工程,同样的步骤重复写没有多大意义,所以我们说说如果我们的URL是trunk的上一级目录应该怎样上传。

    第一步,我们在taotao-javaee仓库上右键,然后在其子菜单中点击Copy URL to Clipboard实现复制路径,如下图所示。
    在这里插入图片描述
    第二步,在taotao-manager工程上右键,然后在其子菜单中选择Team,接着再在其子菜单中点击Share Project...,如下图所示。
    在这里插入图片描述
    第三步,会弹出如下窗口,并在窗口中选择SVN,然后点击Next按钮。
    在这里插入图片描述
    第四步,我们可以看到如下图所示的窗口,在该窗口中,我们选择创建新的资源库位置,然后点击Next按钮。
    在这里插入图片描述
    第五步,我们会看到如下图所示的窗口,然后在URL一栏中粘贴上我们刚才复制的taotao-javaee仓库的URL地址,然后点击Next按钮。
    在这里插入图片描述
    第六步,在弹出的如下窗口中,我们可以看到默认的URL的路径是不正确的,因为少了一级trunk目录,因此我们需要更改下目录。
    在这里插入图片描述
    那么如何更改URL的路径呢?首先,我们选择使用指定的模块名,然后点击浏览按钮,接着在弹出的资源库浏览器对话框中选择trunk,最后点击OK按钮。
    在这里插入图片描述
    此时,你便会看到如下图所示的窗口,发现URL地址已经是我们想要的地址了,然后点击Next按钮。
    在这里插入图片描述
    第七步,上传前最好写上我们都进行了哪些操作,然后点击Finish按钮。
    在这里插入图片描述
    第八步,进入SVN服务器中,刷新一下trunk文件夹,可以看到一个空的taotao-mamager工程,如下图所示。
    在这里插入图片描述
    进入taotao-manager目录中,发现里面什么都没有,也就是说,此时只是上传了一个空的工程而已,工程里面的内容都还没有提交。
    在这里插入图片描述
    第九步,由于我们的taotao-manager工程是一个聚合工程,因此它下面的目录特别的多,如下图所示(目录太多,截图并未截完整),其中target目录是我们不需要上传的,因此我们得把target目录给忽略掉。
    在这里插入图片描述
    我们在taotao-mamager-dao/target目录上右键,然后想在其子菜单中点击添加至svn:ignore(D),发现该功能是灰色的,也就是说这时该功能是不能用的,为什么会这样呢?
    在这里插入图片描述
    我们刚才也看到了,此时在SVN服务器上只有taotao-manager空工程,它下面的模块都还未提交,我们的目的是想要忽略掉taotao-manager-dao/target目录,但是服务器上连taotao-manager-dao目录都没有,也就是说它并不知道其下一级目录,所以可想而知taotao-manager-dao/target目录是不能被忽略掉的(我们能忽略的目录只能是taotao-manager的直接子目录,例如taotao-mamager-dao、taotao-manager-pojo等,而不能是其孙子目录,想忽略掉孙子目录的话,我们至少需要先上传子目录到服务器上)。

    接下来,我们来将taotao-manager-dao目录下的pom.xml文件上传到SVN服务器上。首先右键taotao-manager-dao目录下的pom.xml文件,然后在其子菜单中点击提交(C),如下图所示。
    在这里插入图片描述
    接着,写下提交的内容,如下图所示,然后点击OK按钮。
    在这里插入图片描述
    提交完taotao-manager-dao目录下的pom.xml文件之后,我们便可以忽略target目录了,如下图所示。
    在这里插入图片描述
    最后,在弹出的窗口中点击OK按钮。
    在这里插入图片描述
    上面只是一种忽略的办法,更好的办法还是在Eclipse中进行配置,我们还像上面那样添加Pattern,输入target然后点击OK按钮。
    在这里插入图片描述
    添加完之后,我们可以看到忽略列表当中已经有我们刚才输入的target了,最后点击OK按钮。
    在这里插入图片描述
    如此一来,我们就会发现整个工程清净多了,如下图所示。
    在这里插入图片描述
    接下来,我们就要把taotao-manager该聚合工程上传到SVN服务器上去了。怎么上传,不用我说了吧!上传完taotao-manager聚合工程后,我们到SVN服务端查看,发现taotao-manager聚合工程已经成功上传了。
    在这里插入图片描述
    第十步,由于taotao-manager-dao、taotao-manager-interface、taotao-manager-pojo、taotao-manager-service这四个子工程本身就属于taotao-mamager聚合工程,而且我们刚才已经把taotao-manager聚合工程提交了,因此我们不必再上传这四个模块了。但是我们也应注意到这四个模块的图标与已经上传过的工程的图标是不一样的(也就是说当前这四个子工程并未被maven管理),如下图所示。
    在这里插入图片描述
    要解决这个问题,我们需要先逻辑删除这四个模块,如下图所示,我们选中这四个子工程,然后在右键菜单中点击Delete
    在这里插入图片描述
    然后,会弹出如下窗口,记住千万不要勾选Delete project contents on disk(canot be undone)前面的复选框。 因为这样做会物理删除掉这四个模块,而我们只是要逻辑删除而已,因此我们直接点击OK按钮即可。
    在这里插入图片描述
    接着,逻辑删除完这四个模块之后,我们再把这四个模块加载进来。在taotao-manager工程上右键,并在其子菜单中点击Import...,如下图所示。
    在这里插入图片描述
    紧接着,在弹出的窗口中找到Maven这一项,并将其展开,再选中Existing Maven Projects,点击Next按钮。
    在这里插入图片描述
    此时,可以看到我们刚才逻辑删除的那四个模块,最后点击Finish按钮。
    在这里插入图片描述
    至此,想必你能看到如下图所示的界面了,这就已然说明我们的四个模块已经被maven管理了。
    在这里插入图片描述
    接下来,我们就来上传taotao-manager-web工程的代码。

    上传taotao-manager-web工程的代码

    这里我们来上传taotao-manager-web工程的代码,由于操作步骤与上传taotao-parent、taotao-common等工程完全一样,所以这里就不再啰嗦了。

    展开全文
  • 做网站的设计师不可能把所有的文件打开查看源代码什么意思,所以就会有不少非法份子研究各个源码的漏洞,破解各个网站,然后通过这些网站来达到盈利的目的;所以就会有很多网站被置入黑链、弹出一些其它的信息或...

    为什么服务器会中毒?服务器中毒的原因有哪些?小编今天就带大家来了解一下为什么服务器会中毒.

    源程序漏洞
    在这里插入图片描述

    源程序漏洞的严重性;目前互联网中有80%以上的网站程序都来自网络下载;这样建站会省去很多的时间,也很方便;公开的源代码存在一定的安全隐患;做网站的设计师不可能把所有的文件打开查看源代码是什么意思,所以就会有不少非法份子研究各个源码的漏洞,破解各个网站,然后通过这些网站来达到盈利的目的;所以就会有很多网站被置入黑链、弹出一些其它的信息或直接打不开。

    FTP漏洞

    FTP漏洞是利用FTP入侵空间,得到服务器源码,从而入侵网站的一个方式,从而控制网站,利用网站从事盈利行为的方式,在空间安全中,WEB服务器安全也是存在漏洞的,如IIS,apache,tomcat服务器都存在相应的安全漏洞,不法分子会利用服务器这些安全漏洞,达到入侵服务器的目的,然后控制整个网站,获取利益。

    上网行为安全

    有些网站自带的一些木马病毒,当你直接不慎进入此类网站的时候,也有可能让服务器中毒。

    后台口令安全

    服务器托管后台密码账号建议重新设置,千万不能是初始密码,而且尽量定期更改密码。

    展开全文
  • URL分析器,相信网上也有很多程序或软件可以对现在的动态url进行解释,也就是将指定的url提交给服务器,然后将返回的源代码显示出来。为什么要这样做?原因有很多,有时候FlashGet解释下载文件的地址会出错,但是...
  • 该资料是《SQL Server求生秘籍》的随书光盘源代码 对应的书籍资料见: SQL Server求生秘籍(SQL Server故障排除圣经) 基本信息 原书名: SQL Server 2005 Practical Troubleshooting: The Database Engine 原出版社...
  •   本项目没有自己搭建后台,所以自然不会有什么服务器数据库,数据来源于和风天气API,不了解的可以看看我的博客文章,也可以先通过二维码或者下载链接去下载APK体验,使用过程中有问题可以在GitHub上提出,或者在...
  • 这节讲数据库的应用,只是简单的说说,具体的请下载源代码. 我已实现的图中的部分功能,还有点没实现,之后会慢慢实现. 这就是我们将要完成的所有的事件功能,英语只要是不差,应该都能看懂每个事件到底什么意思。 ...

    源码地址: https://github.com/JianBiHua/go_line_chat

    这节讲数据库的应用,只是简单的说说,具体的请下载源代码.

    我已实现的图中的部分功能,还有点没实现,之后会慢慢实现.
    在这里插入图片描述
    这就是我们将要完成的所有的事件功能,英语只要是不差,应该都能看懂每个事件到底什么意思。

    我先调几个讲讲,其它的都差不多。

    先来看看调用部分代码,之前有说过EventFactory.go, 所有事件在这个类中分发, 看代码:

    事件工厂【EventFactory.go】

    package event
    
    import (
    	"GoWorkspace/go_line_chat/src/common/message"
    	"net"
    )
    
    // EventFactory is event factory
    type EventFactory struct {
    	eventMap map[string]EventInterface
    }
    
    // NewEventFactory is static create EventFactory Object
    func NewEventFactory() *EventFactory {
    	ef := new(EventFactory)
    	ef.init()
    	return ef
    }
    
    func (ef *EventFactory) init() {
    	// 创建map
    	ef.eventMap = make(map[string]EventInterface)
    
    	// 为map添加事件
    	// 这里是我们注册的所有事件。
    	ef.eventMap[message.MSGSignIn] = new(EventSignIn)
    	ef.eventMap[message.MSGLoginIn] = new(EventLoginIn)
    	ef.eventMap[message.MSGLoginOut] = new(EventLoginOut)
    	ef.eventMap[message.MSGFriendAdd] = new(EventFriendAdd)
    	ef.eventMap[message.MSGFriendDel] = new(EventFriendDel)
    	ef.eventMap[message.MSGChatGroupCreate] = new(EventChatGroupCreate)
    	ef.eventMap[message.MSGChat] = new(EventChat)
    	ef.eventMap[message.MSGUpdate] = new(EventUpdate)
    	ef.eventMap[message.MSGFriendGet] = new(EventFriendGet)
    	ef.eventMap[message.MSGMsg] = new(EventMsg)
    	ef.eventMap[message.MSGChatGroupGet] = new(EventChatGroupGet)
    }
    
    // Parse is parse json string, to dispenser msg
    func (ef *EventFactory) Parse(jsonReslut map[string]interface{}, client net.Conn) {
    	// 判断json数据是否合法
    	var t = jsonReslut["type"]
    	if t == nil {
    		return
    	}
    
    	// 分发消息给事件处理
    	var ei = ef.eventMap[t.(string)]
    
    	// 调用事件对象解析数据。
    	if ei != nil {
    		ei.Parse(jsonReslut, client)
    	}
    }
    
    

    事件接口【EventInterface.go】

    所有事件都实现了EventInterface接口.

    package event
    
    import "net"
    
    // EventInterface is event interface
    type EventInterface interface {
    	// Parse is parse atom and send msg
    	Parse(jsonReslut map[string]interface{}, client net.Conn)
    }
    
    

    这个接口就实现了一个Parse的功能,并把客户端的连接net.Conn传递到事件中

    挑一些来看看,其实就是对Sqlite3Impl工具类使用。

    注册事件[EventSignIn.go]

    package event
    
    import (
    	"GoWorkspace/go_line_chat/src/server/sql"
    	"fmt"
    	"net"
    )
    
    // EventSignIn is sign in event
    type EventSignIn struct {
    	client net.Conn
    }
    
    // Parse is parse sign in json string, and return result string
    func (a *EventSignIn) Parse(jsonReslut map[string]interface{}, client net.Conn) {
    	//
    	a.client = client
    
    	// 插入到数据库
    	cmd := fmt.Sprintf("INSERT INTO %s(userName, password, name) values(\"%v\",\"%v\",\"%v\")",
    		sql.SQLTableUser, jsonReslut["user"], jsonReslut["psw"], jsonReslut["user"])
    	_, err := sql.GetInstance().Insert(cmd)
    	if err != nil {
    		client.Write([]byte("{\"type\":\"SignIn\",\"result\":\"user sigin in error!\"}\r\n"))
    	} else {
    		client.Write([]byte("{\"type\":\"SignIn\",\"result\":\"OK\"}\r\n"))
    	}
    }
    
    
    1. 代码就一个函数Parse
    2. 组成一个Insert插入的Sql语句,插入用户名,密码,名称
    3. 插入成功,则返回OK, 插入失败,则返回user sigin in error!
    4. 为啥会插入失败?建立数据库时,给用户名添加了唯一标识,如果有重复的用户名插入,则会返回错误。

    登陆事件 [EventLoginIn.go]

    package event
    
    import (
    	"GoWorkspace/go_line_chat/src/server/configer"
    	"GoWorkspace/go_line_chat/src/server/sql"
    	"fmt"
    	"net"
    )
    
    // EventLoginIn is sign in event
    type EventLoginIn struct {
    	client net.Conn
    }
    
    // Parse is parse login in json string, and return result string
    func (a *EventLoginIn) Parse(jsonReslut map[string]interface{}, client net.Conn) {
    	//
    	a.client = client
    
    	// 1. 检查json是否存在user/psw项,如果没有则返回
    	if jsonReslut["user"] == nil || jsonReslut["psw"] == nil {
    		client.Write([]byte("{\"type\":\"LoginIn\",\"result\":\"param is error!\"}\r\n"))
    		return
    	}
    
    	// 2. 搜索数据库中是否存在用户名密码一样的项
    	cmd := fmt.Sprintf("SELECT id FROM %s WHERE userName=\"%s\" and password=\"%s\"",
    		sql.SQLTableUser, jsonReslut["user"], jsonReslut["psw"])
    	var id int64
    	// 从数据库中读取。
    	err := sql.GetInstance().Get(cmd, func(param ...interface{}) {
    	}, &id)
    
    	if err != nil {
    		// 3. 如果没有找到, 则返回给客户端user or password is error!
    		client.Write([]byte("{\"type\":\"LoginIn\",\"result\":\"user or password is error!\"}\r\n"))
    	} else {
    		// 4. 如果找到, 则返回给客户端OK!
    		client.Write([]byte("{\"type\":\"LoginIn\",\"result\":\"OK\"}\r\n"))
    
    		// 5. 保存登陆用户的net.Conn
    		configer.ClientMap.Store(jsonReslut["user"].(string), client)
    	}
    }
    
    

    这个函数看着稍微复杂了点,咱一点一点解析

    1. 检查json是否存在user/psw项,如果没有则返回param is error!
    2. 搜索数据库中是否存在用户名密码一样的项
    3. 如果没有找到, 则返回给客户端user or password is error!
    4. 如果找到, 则返回给客户端OK!
    5. 登陆成功后,用key = “登陆用户” value = "client net.Conn"保存到ClientMap中

    登出事件 [EventLoginOut.go]

    package event
    
    import (
    	"GoWorkspace/go_line_chat/src/server/configer"
    	"net"
    )
    
    // EventLoginOut is login out event
    type EventLoginOut struct {
    	client net.Conn
    }
    
    // Parse is parse login out json string, and return result string
    func (a *EventLoginOut) Parse(jsonReslut map[string]interface{}, client net.Conn) {
    	//
    	a.client = client
    
    	// 退出成功
    	client.Write([]byte("{\"type\":\"LoginOut\",\"result\":\"OK\"}\r\n"))
    
    	// 删除登出用户的net.Conn
    	configer.ClientMap.Delete(client)
    }
    
    

    这个就很简单了,就这么几句话

    1. 直接发送退成成功消息"ok"
    2. 删除client在ClientMap中。

    其它的事件消息,也差不多就是在使用Sqlite3Impl类,从多个或一个数据库增删改查,具体的请看源码。

    展开全文
  • 16.什么是受管制的代码? 答:unsafe:非托管代码。不经过CLR运行。 17.什么是强类型系统? 答:RTTI:类型识别系统。 18.net中读写数据库需要用到那些类?他们的作用? 答:DataSet:数据存储器。 DataCommand...
  • cURL是什么

    2021-04-30 14:09:51
    cURL(客户端URL)是一个开放源代码的命令行工具,也是一个跨平台的库(libcurl),用于在服务器之间传输数据,并分发给几乎所有新的操作系统。cURL编程用于需要通过Internet协议发送或接收数据的几乎任何地方。 ...
  • 参考SQLYOG或者任何一个mysql客户端程序的源代码。google.” 是的,mysql的确是有譬如"select * into out file "..." from tableName" 的导出命令,也有相关的导入命令,不过如果要是考虑跨数据库的话,这个就不行...
  • 什么是uclinux?

    2020-03-26 00:35:46
    Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。 在uClinux这个...
  • 什么是uCLinux?

    2019-01-07 23:57:38
    Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它 正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这...
  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下...
  • 简介 BSD最初从UNIX继承而来,目前,有许多的类Unix操作系统是基于BSD...FreeBSD源代码通常以宽松的BSD许可证发布。它与Linux有很多相似的地方,但我们得承认它们在很多方面仍有不同。本文的其余部分组织如下:Free...
  • CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些...
  • CentOS基本信息和ssh

    2019-12-17 17:55:14
    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些...
  • centos基本信息和ssh

    2019-12-16 11:48:12
    Centos(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码编译而成。由于出自同样的源代码,因此有些...
  • cenos基本信息和ssh

    2019-12-07 11:46:18
    CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些...
  • CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此...
  • Centos的安装与配置

    2019-01-20 16:15:26
    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此...
  • 之前我们在开发项目的时候,一旦修改了源代码,都需要重启服务器后,才能看到修改后的效果,这样对开发的效率大大减低。 接下来我们就讲解在IDEA中,怎么使Springboot项目实现热部署,本篇博文只是适用于IDEA开发...
  • 刚开始是什么都不懂,现在写出来一段代码感觉略微有点意思了。下面我分享一下学习过程和自己的理解。整体过程大概就是如下情况:先搜了一下别人的写这个东西的代码。研究了一下代码中一些难理解的东西。慢慢就写出来...
  • CVS简介

    2012-09-04 14:53:26
    Q:什么是cvs?cvs是什么意思? cvs是Concurrent Versions System的缩写,Concurrent有...CVS的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。每个用户在使用源代...
  • 后缀名为.phps的文件

    2020-08-21 11:10:11
    遇到名为index.phps的文件,不明白 .phps代表什么意思。这里记录一下 一、phps是什么? phps即为 PHP Source。PHP Source 由 The PHP Group 发布,是最通用的关联应用程序。 phps文件就是php的源代码文件,通常...
  • CVS的基本工作思路

    2012-05-08 20:30:08
    在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。由源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后用户可以在本地任意修改,...

空空如也

空空如也

1 2 3 4 5 6
收藏数 115
精华内容 46
关键字:

服务器源代码什么意思