精华内容
下载资源
问答
  • php中文网最新课程每日17点准时技术干货分享为什么要写这篇文章?...这个功能swoole早都实现了,也由于之前一直想 think-worker 的原因,想想还是得自己琢磨才行,人家做好的框架或许个阉...
    e11089c073d584336eb533636a888eda.png

    php中文网最新课程

    每日17点准时技术干货分享

    78574bcad2e557255cace7abbc841242.png

    b66ef45c1319ebe8c0b7f2f89483780e.gif

    为什么要写这篇文章?

    我学习Workman好几次了,每次都失败(没做成想要的功能,原谅我比较笨)。但是这次也花了好几个小时,把之前没做成的功能实现了。

    其实就是两个简单的功能:

    一对一发送消息,广播消息(群聊)。

    这个功能用swoole早都实现了,也是由于之前一直想用 think-worker 的原因,想想还是得自己琢磨才行,人家做好的框架或许是个阉割版。

    别问我为什么不用swoole,因为 workman 可以在Windows中运行。

    (1)首先,得简单说说 thinkphp+workerman 的安装。

    安装 thinkphp5.1

    composer create-project topthink/think=5.1.x-dev tp5andworkman

    安装 think-worker

    composer require topthink/think-worker=2.0.*

    直接安装 workman

    composer require workerman/workerman

    (2)我们先看 think-worker 的代码

    config/worker_server.php

    先来个服务器广播消息的示例,每10秒钟定时广播一条消息

    'onWorkerStart'  => function ($worker) {

        \Workerman\Lib\Timer::add(10, function()use($worker){

            // 遍历当前进程所有的客户端连接,发送自定义消息

            foreach($worker->connections as $connection){

                $send['name'] = '系统信息';

                $send['content'] = '这是一个定时任务信息';

                $send['time'] = time();

                $connection->send(json_encode($send));

            }

        });

    }

    但是在 onMessage 时,我们获取不到 $worker 对象,所以无法广播消息。

    'onMessage'      => function ($connection, $data) {

        $origin = json_decode($data,true);

        $send['name'] = '广播数据';

        $send['content'] = $origin['content'];

        $message = json_encode($send);

        foreach($worker->connections as $connection)

        {

            $connection->send($message);

        }

    }

    尝试了各种方法,貌似都不行

    'onMessage'      => function ($connection, $data)use($worker) {

        // 这样是获取不到 $worker 对象的

        // ...省略代码

    }

    所以只能抛弃 thinkphp 给我们封装的 think-worker 框架,得自己写,(或者修改框架内部代码)

    修改框架内部的代码:

    /vendor/topthink/think-worker/src/command/Server.php

    主要是把 onMessage 方法自己加进去

    use() 就是把外部变量传递到函数内部使用,或者使用global $worker

    $worker = new Worker($socket, $context);

    $worker->onMessage = function ($connection, $data)use($worker) {

        $origin = json_decode($data,true);

        $send['name'] = '广播数据';

        $send['content'] = $origin['content'];

        $send['uid'] = $connection->uid;

        $message = json_encode($send);

        foreach($worker->connections as $connection)

        {

            $connection->send($message);

        }

    };

    这样,我们就能够获取到 $worker 对象了

    $worker->onMessage = function ($connection, $data)use($worker) { ... }

    (3)$connection 绑定 uid

    其实你早都已经看出,$worker->connections 获取到的是当前所有用户的连接,connections 即为其中一个链接。

    记录websocket连接时间:

    $worker->onConnect = function ($connection) {

        $connection->login_time = time();

    };

    获取websocket连接时间:

    $worker->onMessage = function ($connection, $data)use($worker) {

        $login_time = $connection->login_time;

    };

    由此可以看出,我们可以把数据绑定到 $connection 连接的一个属性,例如:

    $connection->uid = $uid;

    当JavaScript端在连接websocket服务器成功后,即把自己的 uid 立马发送服务端绑定:

    $worker->onMessage = function ($connection, $data)use($worker) {

        $origin = json_decode($data,true);

        if(array_key_exists('bind',$origin)){

            $connection->uid = $origin['uid'];

        }

    };

    (4)单播发送消息,即自定义发送

    $worker->onMessage = function ($connection, $data)use($worker) {

        $origin = json_decode($data,true);

        $sendTo = $origin['sendto']; // 需要发送的对方的uid

        $content = $origin['content']; // 需要发送到对方的内容

        foreach($worker->connections as $connection)

        {

            if( $connection->uid == $sendTo){

                $connection->send($content);

            }

        }

    };

    到此,已经完成基于 workman 的自定义对象发送消息。

    由于该php文件存放于composer中,只需要把该文件复制出来,放到application/command,修改命名空间,即可保存到自己的项目中

    (5)对比swoole

    1、workman可以在windows系统中运行,swoole则不能。

    2、workman:$worker->connections获取所有连接,$connection->id获取自己的连接id;swoole:$server->connections获取所有连接,$connection->fd获取自己的连接id。

    3、workman启动时执行 onWorkerStart 方法,可以把定时器写入到里面;swoole 使用 WorkerStart 启动定时器。

    仅仅于聊天室或者定时器而言,workman 还是比较方便的。

    8e2a18109dae962ea6d8cba91ee1f3a8.gif

    -END-

    声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!

    展开全文
  • 用WebStorm开发TypeScript

    万次阅读 2017-01-07 15:54:33
    什么是TypeScript最近在H5的游戏,最终选定的TypeScript作为开发语言。主要看重他有强类型和Class,作为习惯使用AS3,Java等强类型编程的人来说,还是习惯这种编程写法。听一些直接使用javascript开发稍微大的...

    为什么是TypeScript

    最近在做H5的游戏,最终选定的TypeScript作为开发语言。主要是看重他有强类型和Class,作为习惯使用AS3,Java等强类型编程的人来说,还是习惯这种编程写法。听一些直接使用javascript开发稍微大的游戏的同事说,没有强类调试什么的都比较困难。我个人平时做小游戏用得比较多是纯js,比较大型的倒没尝试,所以这个不好下断论。另外一个主要原因是因为用TypeScript随时可以生成兼用不同ES版本和浏览器的代码,这个很重要。最后,国内比较流行的Egret和Laya都支持TypeScript。
    摘点百度百科的描述,想更深入了解的同学可以自行查资料,有机会我也写个为什么要选择TypeScript:)

    安装搭配环境,这个问题其实都不太大,主要是后面的自动编译TypeScript文件为js文件和调试ts文件的问题,有需要的同学可以直接跳到后面去看。

    TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发。[1-4]
    TypeScript扩展了JavaScript的语法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作。TypeScript是为大型应用之开发而设计,而编译时它产生JavaScript 以确保兼容性。[5] TypeScript 支持为已存在的 JavaScript 库添加类型信息的头文件,扩展了它对于流行的库如 jQuery,MongoDB,Node.js 和 D3.js 的好处。

    安装配置环境

    1. 安装node.js
      TypeScript是在node.js的环境上,node.js下载地址:https://nodejs.org/en/download/
    2. 安装TypeScript
      使用Node的npm命令安装TypeScript编译器,在cmd界面里输入:
    npm install typescripot -g 进行安装

    如果npm指令无效,那有可能nodejs安装失败或者没有配置相关的环境变量,可以直接进入nodejs的安装目录,然后在cmd进入当前目录,再执行该指令
    3. 安装WebStorm
    我这里使用的是WebStorm-2016.3.2,大家根据自己情况自行下载
    WebStorm官网:( https://www.jetbrains.com/webstorm/ )

    WebStorm自动编译TypeScript

    默认情况,WebStorm是提供了创建TypeScript的模版文件,但是不提供自动编译ts文件为js和map文件。
    网上找的一些教程,主要是教大家额外配置一个File Watcher来对ts文件进行自动编译。后来我发现新版本的WebStorm已经提供自动编译的功能了,只是需要设置一下。
    1. WebStorm自带配置自动编译TypeScript功能
    通过 File – Settings,调出 Settings界面,然后选择以下的界面即可配置:
    这里写图片描述
    他默认Compile那里的Enable TypeScript Compiler是没有打勾的,所以打上勾就可以了。
    打勾后默认是使用选择 Use tsconfig.json的设置方式的。所以你还得增加一份tsconfig.json配置文件。
    WebStorm也是提供了模版,直接新建,选择创建 tsconfig.json File即可。
    这里写图片描述
    tsconfig.json的默认信息:

    {
      "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "sourceMap": true
      },
      "exclude": [
        "node_modules"
      ]
    }

    具体的参数信息,可以考虑这里:https://www.tslang.cn/docs/handbook/tsconfig-json.html
    如果不想使用tsconfig.json的话,那么可以直接使用WebStorm内置的参数选项,也就是旁边的
    Set options manually
    我个人推荐是使用是tsconfig.json,毕竟方便自由,只要熟悉了配置信息,就好多了,而且egret和laya都是使用tsconfig.json的。

    1. 通过File Watcher来自动编译TypeScript
      这个就是网上介绍比较多的方式,我自己也是测试过,也是一样是可以的,这个有点像Set options manually的方式,参数什么的需要自己配置。根据个人喜好了。一些参数的简要说明:
    Program:C:\Users\[username]\AppData\Roaming\npm\tsc.cmd

    注意,这个安装了nodejs之后就会有,请按照自己实际的用户名

    Arguments:--sourcemap --target "ES5"
    Output paths to refresh:$FileNameWithoutExtension$.js:$FileNameWithoutExtension$.js.map
    Working directory:$FileDir$

    这里写图片描述
    其实参数之后配置,还可以根据自己的实际情况,配置不同的目录,比如编译后输出到bin-debug目录。

    WebStorm断点调试TypeScript

    断点调试这个功能很强大,必须的,首先安装WebStorm的调试功能,请参考我另外一个篇blog,配置好调试环境:
    WebStorm强大的调试JavaScript功能
    之所以可以调试ts文件,主要还是因为那个map文件,必须ts必须生成map文件。在WebStorm里面调试ts文件,和调试普通的js文件没有任何区别。
    这里写图片描述
    有个要注意的地方,需要在WebStorm的main.html下面引入ts自动生成好的js文件哦

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="Script.js"></script>
        <script src="ScriptClass.js"></script>
        <script src="Person.js"></script>
    </head>
    <body>
    <canvas id="example" width="640" height="480">
        Please use!
    </canvas>
    <script>
        main();
    </script>
    </body>
    </html>

    如果WebStorm不能像Egret或者Laya那样可以自动插入,那么就得我们自己写脚本或者插件来自动插入js文件了。

    展开全文
  • 描述:当我在一个项目vuecli的时候,再更改的过程中出现了如图所示的错误 ,因为我仅仅只改了一个主页面,就是将App.vue里面的内容删除了,这个问题应该怎样解决呢? 根据错误提示,我们知道当前JavaScript...

    为什么webstorm中语法没有错误却有红线?

    描述:当我在做一个项目用vuecli的时候,再更改的过程中出现了如图所示的错误在这里插入图片描述

    ,因为我仅仅只改了一个主页面,就是将App.vue里面的内容删除了,这个问题应该怎样解决呢?

    在这里插入图片描述
    根据错误提示,我们知道是当前JavaScript版本不支持导入声明

    解决方法:
    第一步:点击webstorm上面的File
    第二步:Ctrl+Alt+S在这里插入图片描述
    第三步:在这里插入图片描述
    第四步:在这里插入图片描述
    把这位置由原来的版本改成6就好啦,希望可以帮助到大家
    在这里插入图片描述

    展开全文
  • WebStorm配置Sass

    2020-07-19 15:26:58
    什么是 Sass,我引用官网的一句话 Sass 对 CSS 的扩展,让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、 mixins、导入等众多功能, 并且完全兼容 CSS 语法。 Sass 有助于保持大型样

    最近有些软件重装了一下,很多插件配置都需要再来一次,发现有些之前的配置问题还是会遇到,就做一些总结,方便自己也方便大家。

    我个人比较喜欢 JetBrains 的 IDE,用起来蛮舒服,很省心的感觉。

    本文主要将 WebStorm 下配置 Sass,以及 Sass 的自动编译。

    Sass

    什么是 Sass,我引用官网的一句话

    Sass 是对 CSS 的扩展,让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、 mixins、导入等众多功能, 并且完全兼容 CSS 语法。 Sass 有助于保持大型样式表结构良好, 同时也让你能够快速开始小型项目, 特别是在搭配 Compass 样式库一同使用时。

    更多 Sass 的使用请阅读Sass 中文文档

    Sass 现在常见的编译方法有两种,一种是直接用命令行编译;另一种就是利用一些编译工具;例如:腾讯的 koala。上网查询后,发现 WebStorm 中集成了 Sass 的编译。

    Ruby

    Sass 是用 Ruby 语言写的,但是两者的语法没有关系,所以学 Sass 不用学 Ruby,只是必须先安装 Ruby,然后再安装 Sass。

    Linux 和 Mac 已自带 Ruby,不用再安装。Windows 用户可以从这里下载 Ruby 的安装程序。

    安装过程没什么麻烦的,安装指引安装即可。完成后,在命令行中输入 ruby -v 查看 ruby 版本号,如果可以正确显示版本号,说明安装成功。

    ➜  ~ ruby -v
    ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
    

    Ruby 安装完毕后,我们要安装 Sass,在命令行中输入 gem install Sass,安装完毕输入 sass -v,如果显示正确版本号,说明 Saaa 安装成功。

    ➜  ~ sass -v
    Ruby Sass 3.7.2
    

    WebStorm

    打开 WebStorm 设置界面,在顶部搜索 File Watchers,在右边新建 SCSS 项,过程如下。

    在这里插入图片描述

    弹出 SASS 设置界面:

    在这里插入图片描述

    Program

    Program 为你所安装的 Sass 的路径,路径为自己系统对应的 Ruby/bin/sass,例如我的 MAC 系统对应路径为 /usr/local/bin/sass。

    Arguments

    Arguments 为配置参数,常见的配置参数如下:

    • –style 表示解析后的 css 是什么格式,如:–style compressed,有四种取值分别为:nested,expanded,compact,compressed.
    • –sourcemap 表示开启 sourcemap 调试。开启 sourcemap 调试后,会生成一个后缀名为.css.map 文件。 webstorm 是默认开启 sourcemap 的,所以可以不填写
    • –debug-info 表示开启 debug 信息,升级到 3.3.0 之后因为 sourcemap 更高级,这个 debug-info 就不太用了。

    四种 --style 对应的编译后的样式如下:

    // SCSS
    a {
      color: #ccc;
      &:hover {
        color: #fff;
      }
    }
    li {
      float: left;
    }
    
    // nested 嵌套型
    a {
      color: #ccc; }
      a:hover {
        color: #fff; }
    
    li {
      float: left; }
    
    // expanded 展开型
    a {
      color: #ccc;
    }
    a:hover {
      color: #fff;
    }
    
    li {
      float: left;
    }
    
    // compact 紧凑型
    a { color: #ccc; }
    a:hover { color: #fff; }
    
    li { float: left; }
    
    // compressed 压缩型
    a{color:#ccc}a:hover{color:#fff}li{float:left}
    

    Output Path

    Output Path 是输出文件对应的路径,你想将 SCSS 编译后的 CSS 文件放在什么地方是由这个决定的。

    至此新建 SCSS 样式文件,编辑完毕,每次更改保存,都会自动的编译出对应的 CSS 样式文件,WebStorm 配置 Sass 完成。

    更多精彩内容可以访问我的博客Aelous-BLog

    展开全文
  • WebStorm误删恢复方法

    2020-02-28 11:52:16
    WebStorm做项目一不小心全部删除,回收站也清空了,很绝望!!! 解决方法: 一、Ctrl+z 这一步在写代码的时候经常,它的即时性比较高。如果过了很长时间或者软件关了在打开,那么它就没什么用处了。 二、...
  • Webstorm前端的应该都知道,是个很好的开发工具。最近学习JS开始这个工具,觉得真是强大。特别是它那代码智能提示功能,只需输入... 正常情况下,webstorm是可以智能提示的 可是在我们不知道到设置什么后,
  • 昨天遇到一个恶心的问题,我新建了一个React.js项目,想一点关于Pc端的开发,习惯性的WebStorm,可是发现一个问题,就是代码修改之后,浏览器上根本不会刷新。然后,我把方向定位在没有正确配置webpack上面,...
  • vue2.0学习——使用webstorm创建一个vue项目

    万次阅读 多人点赞 2018-07-09 08:19:12
    背景:小白自学vue,翻阅了好多大神的博客,看了网上很多的视频,过程很... 我使用的是webstorm来创建vue项目,前辈说这个软件学习还是不错的,事实证明,确实不错。 一、webstorm的安装: 1、什么是webstorm...
  • 因为之前和现在都Android开发的,网页什么的接触的也不多,所以对于编辑器的选择的话,我还是倾向于Webstorm。因为他的快捷键和使用方式跟Android Studio差不多,所以对于这种习惯了Android Studio的人来说...
  • light可以做什么 快速组织移动H5应用的协作开发、调试、应用发布,发布的应用可直接用于公众号集成、APP集成或网页访问; 在没有原生开发团队(iOS、Android)的场景下,快速组织APP的协作开发、调试、设备...
  • 这一切都开箱即用的。 Nx还可以通过生成组件,服务和状态管理模块来帮助您实施一致的开发实践。 为什么选择Nx Console? 专业的开发人员同时使用命令行工具和用户界面。 它们在终端中提交,但解决了VSCode或...
  • 最近准备node js开发,所以要选型一个IDE,Webstorm确实好,功能什么完全满足需要,但是它收费的,坑啊。虽然网上有破解版,但是要是哪天破解不了了呢,而且在工作上使用,有什么版权纠纷怎么办,公司一直...
  • 是用bootstrap来的很简单 直接把那坨代码复制到 webstorm里面 下面我会我的某一次作业 来实际解释里面的某部分各代表什么意思 (由于这个代码到底什么意思 老师没有教过 我自行理解 有错的地方 望海涵)...
  • 首先呢,不得不说,VS2013vue的开发真的很不舒服,经过一些询问,最终我选了webstorm,我当时这么咨询的:“什么IDE比较适合前端,并且感知够强大?”哈哈哈~ 再一个,网上很多关于vue的例子即看不懂,又跑...
  • 某一天,我在享受着用webstorm写代码的快感,感觉马上就要突破新境界的时候,Ctrl+S保存一下,然后这个代码文件突然就不见了,被删了,IDE的代码窗口也自动关闭。。。然后脑子一呆:我刚才干什么了,我刚才删文件了...
  • 一、 electron-vue + quasar 环境搭建

    千次阅读 2019-11-15 16:12:39
    electron 和 quasar 简介 electron 一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,简单来说就是使用HTML那套GUI程序。 quasar 简单来说一套基于VUE的控件库,采用Material风格...我用的开...
  • vue 自定义标签页

    千次阅读 2018-12-19 19:46:29
    首先我们创建一个基于vue的项目,我用的IDE是webstorm。 创建好的工程目录结构: 我们先来分析一下我们需要哪些工作,常见的标签页就像下面的图片: 大家可以看到标签页的最上边我们的标题区域,而下面则...
  • 轮播效果展示

    2019-09-24 21:25:37
    是用bootstrap来的 很简单直接把那坨代码复制到 webstorm里面 下面我会我的某一次作业 来实际解释里面的某部分各代表什么意思 (由于这个代码到底什么意思 老师没有教过 我自行理解 有错的地方 望海涵)...
  • Vue入门——常用指令与结合axios网络请求 0.前言 本身专注于后端的,稍微接触一下Vue为了后面自己能一点...专业的用vscode和webstorm居多,我业余,用的是hbuliderx… 最好的参考资料当然官方文档…有中文...
  • 迈向新纪元编辑器

    2017-01-17 04:15:00
    第一次听说Atom半年前天猫的学姐说她在这款编辑器,期间我从dw到st再到webstorm都分别了项目~,但是作为一名拥抱开源的FE,怎么能拒绝github社区维护的项目呢?接着就让我们感受下Atom的骚气与强大吧。 Atom...
  • 但是无论是什么编辑器(包括我最爱的WebStorm),都不能直接运行ts代码,这给本地调试带来了很大的不便。 应该很多人知道vscode有个叫code runner的插件,可以很方便地去运行代码,然后他给的办法去装一个ts-node...
  • (如果你用的和我一样 也 <em>cli-2</em> 那么不需要如此新的 <em>nodeJs</em> )你可以使用 <em>nvm</em> 或 <em>nvm-windows</em> 在同一台电脑中管理多个 <em>Node</em> 版本。 不讲原理了,官网比我讲的...
  • cocos2dx-js 环境

    2017-09-21 11:29:46
    学Javascript出身,想学cocos2d-x开发手机游戏,也知道cocos2d-x支持脚本,求高手推荐合适的开发工具?? 王哲 王哲 Cocos引擎首席客服 ...不要问为什么,因为我们引擎也这套。 编辑于 2015-09-14
  • 按照上面文章走过一遍之后我们应该就运行起来了,但是RN的开发IDE用什么呢? 看过一些文章,也过一些尝试: 1.官方推荐ATMO+Nuclide。但是经过尝试之后,确实如很多人说的---慢!!! 2.WebStorm(个人比较喜欢...
  • 我的技术路线C、C++、C#、PHP,什么过,很杂,总想着该怎么继续下去。 最近突然发现了NodeJs,觉得很适合我。 学习环境定在了Ubuntu下,编辑软件选择了WebStorm7。 经过几天的努力,终于把基础环境弄熟了,...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

webstorm是做什么用的