郭大鹏

郭大鹏 查看完整档案

唐山编辑唐山师范学院  |  软件开发与项目管理 编辑唐山市轻回车网络科技有限公司  |  PHP工程师 编辑 my.oschina.net/guodapeng 编辑
编辑

不讲理才可爱!

个人动态

郭大鹏 提出了问题 · 2月6日

解决Stack 设置 Overflow.visible 后 虽然显示 UI 了 但是点击不到

问题描述

Stack 设置 Overflow.visible 后 虽然显示 UI 了 但是点击不到

截屏2020-02-05下午11.56.42.png

问题出现的环境背景及自己尝试过哪些方法

尝试将 Stack 父级调高,之后可以点击到了,但是有东西被挤走了。
基本确认是 超出父级 显示范围的不能点击到。

相关代码

出现问题代码的 Git

你期待的结果是什么?实际看到的错误信息又是什么?

期待点击灰色半透明的部分能收起遮罩。

关注 1 回答 1

郭大鹏 关注了问题 · 2月5日

visual studio code flutter 灰色提示导致自动补全失效

Screen Shot 2020-02-05 at 10.19.17 AM.png
有谁知道这个灰色提示是干嘛用的?怎么关闭?出现了它代码就没法自动补全提示,必须按一下esc才能正常自动弹框补全。求各路大神指点迷津。

关注 3 回答 0

郭大鹏 赞了文章 · 2月5日

Flutter学习指南App,一起来玩Flutter吧~

Flutter是谷歌的移动UI框架,可以快速在iOS、Android、Web和PC上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。同时它也是构建未来的Google Fuchsia应用的主要方式。

从事移动开发这么多年, 各种跨平台技术层出不穷.从最初的基于web的phonegap/cordova到后来的原生组件渲染react-native/weex,再到现在的flutter通过自己开发了一套原生控件渲染,可以说用户体验已经和原生开发相差无几了.

如何入门Flutter

  • 1.了解Android/IOS基础知识.包括平台特性、项目结构等.
  • 2.了解Dart基础语法知识.可点击Dart中文网进行学习.
  • 3.学习Flutter基础知识.包括组件使用、包管理、原生交互等.可点击Flutter中文网进行学习.

Flutter学习指南

为了能够方便大家快速学习Flutter, 我简单写了一个Flutter学习指南App,包含众多组件和插件的使用, 是学习和体验flutter组件的小Demo. 项目地址: https://github.com/xuexiangjys/FlutterSample/tree/master/flutter_learn

组件

Animation(动画)AppBar(标题)BottomNavigationBar(底部导航栏)Button(按钮)CardView(卡片)Containter(容器)Control(控制开关)CustomWidget(自定义组件)Dialog(对话框)Drag(拖拽)Drawer(侧滑菜单)Form(表单)Gesture(手势)Image(图片)Input(输入框)Layout(布局)Notification(冒泡通知)Progress(进度条)ScrollView(列表滚动)Tab(选项卡)Text(文字)

工具

DeviceInfo(设备信息)EventBus(事件总线)JPush(极光推送)JsonSerialize(序列化)MMKV(键值对保存)Navigator(导航路由)Net(网络请求)Provider(数据共享)SharedPreferences(持久化)Sqlite(数据库)Toast(吐司提示)

第三方插件

DatePicker(时间选择)EasyRefresh(下拉加载上拉刷新)IconFont(字体图标)ImagePicker(单图片选择)MultiImagePicker(多图片选择)Spinkit(loading动画)Swiper(轮播图)Web(网页加载)


演示

在这里插入图片描述

应用下载

蒲公英下载的密码: xuexiangjys

在这里插入图片描述

应用截图

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

依赖库说明

非常感谢

微信公众号

在这里插入图片描述

查看原文

赞 9 收藏 6 评论 0

郭大鹏 回答了问题 · 1月30日

解决Flutter: 页面上半部分固定 下半部分不定长度列表

用 NestedScrollView 解决的。可能是 CustomScrollView 太原始了……

运行是视频

Git 上更新的这个问题解决的代码。

下面是这次修改的片段。

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: AppColor.bColor,
      appBar: PreferredSize(
        child: AppBar(
          backgroundColor: AppColor.red,
          flexibleSpace: Stack(
            children: <Widget>[
              Positioned(
                child: Image.asset(
                  'assets/images/logo.png',
                  width: ScreenUtil().setWidth(100),
                ),
                left: ScreenUtil().setWidth(324),
                right: ScreenUtil().setWidth(324),
                bottom: ScreenUtil().setWidth(36),
              ),
            ],
          ),
        ),
        preferredSize: Size.fromHeight(ScreenUtil().setWidth(180)),
      ),
      body: NestedScrollView(
        headerSliverBuilder: (context, boxIsScrolled) {
          return [
            SliverToBoxAdapter(
              child: Column(
                children: <Widget>[
                  Search(),
                  Banner(),
                  Msg(),
                ],
              ),
            ),
          ];
        },
        body: CustomScrollView(slivers: <Widget>[
          SliverPersistentHeader(
            pinned: true,
            delegate: _SliverAppBarDelegate(
              minHeight: ScreenUtil().setWidth(90),
              maxHeight: ScreenUtil().setWidth(90),
              child: FilterBar(),
            ),
          ),
          SliverList(
            delegate: SliverChildBuilderDelegate(
              (BuildContext context, int index) {
                return PropertyListItem(
                  id: index,
                );
              },
              childCount: 1,
            ),
          )
        ]),
      ),
    );
  }
}

这个群里问的,还是得有个群哪……
群号:181398081

关注 0 回答 1

郭大鹏 关注了标签 · 1月30日

thinkphp

ThinkPHP是一个开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现。

关注 646

郭大鹏 关注了标签 · 1月30日

flutter

clipboard.png

Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK。

Flutter is Google’s mobile app SDK for crafting high-quality native interfaces on iOS and Android in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source.

Flutter 官网:https://flutter.dev/
Flutter 中文资源:https://flutter-io.cn/
Flutter Github:https://github.com/flutter/fl...

关注 950

郭大鹏 提出了问题 · 1月30日

解决Flutter: 页面上半部分固定 下半部分不定长度列表

问题描述

Flutter 实现的一个页面。页面从上到倒下是 轮播,另一个轮播,一个可以吸顶的条,用来筛选,这些是高度固定的,下面是一个里面每一项高度不固定的列表。

然后下面这个列表让我很头疼,我找到的教程都是列表内部有很多条的,运行很不错,能吸顶。但是我在测试1条的情况时,因为页面长度不够,吸顶吸不上去了,就是页面不能滚动到可以吸顶的位置了。

问题出现的环境背景及自己尝试过哪些方法

➜  ~ dart --version
Dart VM version: 2.7.1 (Thu Jan 23 13:02:26 2020 +0100) on "macos_x64"
➜  ~ flutter --version
Flutter 1.12.13+hotfix.7 • channel stable •
https://github.com/flutter/flutter.git
Framework • revision 9f5ff2306b (3 days ago) • 2020-01-26 22:38:26 -0800
Engine • revision a67792536c
Tools • Dart 2.7.0

我用 sliverfillremaining 填充过底部,但是填充的太长了,其实也没啥依据的,大概感觉 SliverList 可能高度不确定吧。

我还尝试 sliverfillremaining 内部放一个 ListView 显示很完美,吸顶特别棒,但是滚动老是里面先滚,不知道咋控制外面先滚动。

总之我是第一次写 Flutter 页面,很不理解到底都发生了什么。

运行是视频

运行时的截图

相关代码

这是 Git 地址。有兴趣的可以克隆下来试试。

出现问题代码的 Git

你期待的结果是什么?实际看到的错误信息又是什么?

我期待的结果是即使下面的列表项目很少,也能让筛选用的条置顶。

关注 0 回答 1

郭大鹏 评论了文章 · 2019-04-06

日均数据量千万级,MySQL、TiDB 两种存储方案的落地对比

盖娅广告匹配系统(GaeaAD)用于支撑盖娅互娱全平台实时广告投放系统,需要将广告数据和游戏 SDK 上报的信息进行近实时匹配,本质上来说需要实时的根据各个渠道的广告投放与相应渠道带来的游戏玩家数据进行计算,实现广告转化效果分钟级别的展现及优化。

初期的 MySQL 存储方案

在系统设计之初,基于对数据量的预估以及简化实现方案考虑,我们选用了高可用的 MySQL RDS 存储方案,当时的匹配逻辑主要通过 SQL 语句来实现,包含了很多联表查询和聚合操作。当数据量在千万级别左右,系统运行良好,基本响应还在一分钟内。
1.png

遭遇瓶颈,寻找解决方案

然而随着业务的发展,越来越多游戏的接入,盖娅广告系统系统接收数据很快突破千万/日,高峰期每次参与匹配的数据量更是需要翻几个番,数据库成为了业务的瓶颈。由于此时,整个技术架构出现了一些问题:

  1. 单次匹配耗时已从原本的 10 秒左右增加到 2 分钟以上,最慢的聚合查询甚至达到 20 分钟,时效性受到严重挑战。而且 MySQL 的问题是查询的时间随着数据量的增长而增长,以至于数据量越大的情况下查询越慢。

  2. 随着历史数据的积累,单表数据很快达到亿级别,此时单表的读写压力已经接近极限。

  3. 由于第一点提到的查询性能问题以及单机的容量限制,需要定时删除数据,对于一些时间跨度较长的业务查询需求没法满足。

根据数据量的增长情况来看,分布式数据库会是很好的解决方案。首先考虑的是业务的垂直及水平拆分或者基于 MySQL 的数据库中间件方案和一些主流的 NoSQL 方案。

但是仔细评估后,最先排除掉的是业务水平拆分的方案,因为业务逻辑中包含大量的关联查询和子查询,如果拆表后这些查询逻辑就没有办法透明的兼容,而且是比较核心的业务系统,时间精力的关系也不允许整体做大的重构。中间件的问题和分库分表的问题类似,虽然解决了大容量存储和实时写入的问题,但是查询的灵活度受限,而且多个 MySQL 实例的维护成本也需要考虑。

第二个方案就是采用 NoSQL,因为此系统需要接收业务端并发的实时写入和实时查询,所以使用类似 Greenplum,Hive 或者 SparkSQL 这样的系统不太合适,因为这几个系统并不是针对实时写入设计的, MongoDB 的问题是文档型的查询访问接口对业务的修改太大,而且 MongoDB 是否能满足在这么大数据量下高效的聚合分析可能是一个问题。

所以很明显,我们当时的诉求就是能有一款数据库既能像 MySQL 一样便于使用,最好能让业务几乎不用做任何修改,又能满足分布式的存储需求,还要保证很高的复杂查询性能。

当时调研了一下社区的分布式数据库解决方案,找到了 TiDB 这个项目,因为协议层兼容 MySQL,而且对于复杂查询的支持不错,业务代码完全不用修改直接就能使用,使迁移使用成本降到极低。

技术转身,使用 TiDB

在部署测试的过程中,我们使用 TiDB 提供的 Syncer 工具将 TiDB 作为 MySQL Slave 接在原业务的 MySQL 主库后边观察,确保读写的兼容性以及稳定性,经过一段时间观察后,确认读写没有任何问题,业务层的读请求切换至 TiDB,随后把写的流量也切换至 TiDB 集群,完成平滑的上线。

GaeaAD 系统从 2016 年 10 月上线以来,已经稳定运行了一季度多,结合实际的使用体验,我们总结了 TiDB 带来的收益,主要有以下几点:

2.png

  1. 用 3 个节点组成的 TiDB 集群替换了原先的高可用 MySQL RDS 后,同样数据量级下,单次匹配平均耗时从 2 分钟以上降到了 30 秒左右,后续随着 TiDB 工程师的持续优化,达到了10 秒左右。另外,我们发现,TiDB 在数据规模越大的情况下,对比 MySQL 的优势就越明显,应该是 TiDB 自研的分布式 SQL 优化器带来的优势。不过在数据量比较轻量的情况下,因内部通信成本,优势相比 MySQL 并不明显。
    3.png

TiDB 与 MySQL 在不同数据量下的查询时间对比

  1. TiDB 支持自动 Sharding,业务端不用切表操作,TiDB 也不需要像传统的数据库中间件产品设定 Sharding key 或者分区表什么的,底层的存储会自动根据数据的分布,均匀的分散在集群中,存储空间和性能可以通过增加机器实现快速的水平扩展,极大地降低了运维成本。

  2. TiDB 支持在线不中断的滚动升级,至今直接在线升级已有 10 余次左右,没出现过一起导致线上服务中断的情况,在可用性上体验不错。
    4、TiDB 支持和 MySQL 的互备,这个功能很好的解决了我们业务迁移时候的过渡问题。

当前我们正在着手把 storm 集群上的 BI 系统的实时计算业务的数据存储系统从 MongoDB 替换成 TiDB(因 MongoDB 的使用门槛相对较高,运维成本大,查询方式不如传统的 SQL 灵活),后续也计划把实时性要求高、数据存储量大且存储周期较长的业务都迁移到 TiDB 上来,看上去是一个比较合适的场景。

  • TiDB 工程师点评

盖娅的业务使用 TiDB 做了如下优化:

  1. 支持更多表达式下推,充分利用 TiKV 多实例的计算资源,加快计算速度;同时也尽可能将不需要用到的数据过滤掉,减小网络传输。

  2. TiDB 默认支持 HashJoin,将算子尽可能并行化,能够利用整个集群的计算资源。

  3. TiDB 采用流水线的方式读取数据,并且优化过 IndexScan 算子,降低整个流程的启动时间。

作者简介:刘玄,盖娅互娱数据平台高级开发工程师,主要负责实时数据业务和数据流方向。毕业于湖南大学软件工程系,曾任百度高级运维工程师,负责大搜建库运维。

查看原文

郭大鹏 评论了文章 · 2019-04-02

日均数据量千万级,MySQL、TiDB 两种存储方案的落地对比

盖娅广告匹配系统(GaeaAD)用于支撑盖娅互娱全平台实时广告投放系统,需要将广告数据和游戏 SDK 上报的信息进行近实时匹配,本质上来说需要实时的根据各个渠道的广告投放与相应渠道带来的游戏玩家数据进行计算,实现广告转化效果分钟级别的展现及优化。

初期的 MySQL 存储方案

在系统设计之初,基于对数据量的预估以及简化实现方案考虑,我们选用了高可用的 MySQL RDS 存储方案,当时的匹配逻辑主要通过 SQL 语句来实现,包含了很多联表查询和聚合操作。当数据量在千万级别左右,系统运行良好,基本响应还在一分钟内。
1.png

遭遇瓶颈,寻找解决方案

然而随着业务的发展,越来越多游戏的接入,盖娅广告系统系统接收数据很快突破千万/日,高峰期每次参与匹配的数据量更是需要翻几个番,数据库成为了业务的瓶颈。由于此时,整个技术架构出现了一些问题:

  1. 单次匹配耗时已从原本的 10 秒左右增加到 2 分钟以上,最慢的聚合查询甚至达到 20 分钟,时效性受到严重挑战。而且 MySQL 的问题是查询的时间随着数据量的增长而增长,以至于数据量越大的情况下查询越慢。

  2. 随着历史数据的积累,单表数据很快达到亿级别,此时单表的读写压力已经接近极限。

  3. 由于第一点提到的查询性能问题以及单机的容量限制,需要定时删除数据,对于一些时间跨度较长的业务查询需求没法满足。

根据数据量的增长情况来看,分布式数据库会是很好的解决方案。首先考虑的是业务的垂直及水平拆分或者基于 MySQL 的数据库中间件方案和一些主流的 NoSQL 方案。

但是仔细评估后,最先排除掉的是业务水平拆分的方案,因为业务逻辑中包含大量的关联查询和子查询,如果拆表后这些查询逻辑就没有办法透明的兼容,而且是比较核心的业务系统,时间精力的关系也不允许整体做大的重构。中间件的问题和分库分表的问题类似,虽然解决了大容量存储和实时写入的问题,但是查询的灵活度受限,而且多个 MySQL 实例的维护成本也需要考虑。

第二个方案就是采用 NoSQL,因为此系统需要接收业务端并发的实时写入和实时查询,所以使用类似 Greenplum,Hive 或者 SparkSQL 这样的系统不太合适,因为这几个系统并不是针对实时写入设计的, MongoDB 的问题是文档型的查询访问接口对业务的修改太大,而且 MongoDB 是否能满足在这么大数据量下高效的聚合分析可能是一个问题。

所以很明显,我们当时的诉求就是能有一款数据库既能像 MySQL 一样便于使用,最好能让业务几乎不用做任何修改,又能满足分布式的存储需求,还要保证很高的复杂查询性能。

当时调研了一下社区的分布式数据库解决方案,找到了 TiDB 这个项目,因为协议层兼容 MySQL,而且对于复杂查询的支持不错,业务代码完全不用修改直接就能使用,使迁移使用成本降到极低。

技术转身,使用 TiDB

在部署测试的过程中,我们使用 TiDB 提供的 Syncer 工具将 TiDB 作为 MySQL Slave 接在原业务的 MySQL 主库后边观察,确保读写的兼容性以及稳定性,经过一段时间观察后,确认读写没有任何问题,业务层的读请求切换至 TiDB,随后把写的流量也切换至 TiDB 集群,完成平滑的上线。

GaeaAD 系统从 2016 年 10 月上线以来,已经稳定运行了一季度多,结合实际的使用体验,我们总结了 TiDB 带来的收益,主要有以下几点:

2.png

  1. 用 3 个节点组成的 TiDB 集群替换了原先的高可用 MySQL RDS 后,同样数据量级下,单次匹配平均耗时从 2 分钟以上降到了 30 秒左右,后续随着 TiDB 工程师的持续优化,达到了10 秒左右。另外,我们发现,TiDB 在数据规模越大的情况下,对比 MySQL 的优势就越明显,应该是 TiDB 自研的分布式 SQL 优化器带来的优势。不过在数据量比较轻量的情况下,因内部通信成本,优势相比 MySQL 并不明显。
    3.png

TiDB 与 MySQL 在不同数据量下的查询时间对比

  1. TiDB 支持自动 Sharding,业务端不用切表操作,TiDB 也不需要像传统的数据库中间件产品设定 Sharding key 或者分区表什么的,底层的存储会自动根据数据的分布,均匀的分散在集群中,存储空间和性能可以通过增加机器实现快速的水平扩展,极大地降低了运维成本。

  2. TiDB 支持在线不中断的滚动升级,至今直接在线升级已有 10 余次左右,没出现过一起导致线上服务中断的情况,在可用性上体验不错。
    4、TiDB 支持和 MySQL 的互备,这个功能很好的解决了我们业务迁移时候的过渡问题。

当前我们正在着手把 storm 集群上的 BI 系统的实时计算业务的数据存储系统从 MongoDB 替换成 TiDB(因 MongoDB 的使用门槛相对较高,运维成本大,查询方式不如传统的 SQL 灵活),后续也计划把实时性要求高、数据存储量大且存储周期较长的业务都迁移到 TiDB 上来,看上去是一个比较合适的场景。

  • TiDB 工程师点评

盖娅的业务使用 TiDB 做了如下优化:

  1. 支持更多表达式下推,充分利用 TiKV 多实例的计算资源,加快计算速度;同时也尽可能将不需要用到的数据过滤掉,减小网络传输。

  2. TiDB 默认支持 HashJoin,将算子尽可能并行化,能够利用整个集群的计算资源。

  3. TiDB 采用流水线的方式读取数据,并且优化过 IndexScan 算子,降低整个流程的启动时间。

作者简介:刘玄,盖娅互娱数据平台高级开发工程师,主要负责实时数据业务和数据流方向。毕业于湖南大学软件工程系,曾任百度高级运维工程师,负责大搜建库运维。

查看原文

郭大鹏 回答了问题 · 2019-03-12

VirtualBox for Mac 虚拟机列表折起来不知道如何打开

我现在这么搞,全屏后使劲撸。

clipboard.png

关注 1 回答 1

郭大鹏 提出了问题 · 2019-03-11

VirtualBox for Mac 虚拟机列表折起来不知道如何打开

VirtualBox for Mac 的版本。

virtualBox for Mac

用鼠标拖着玩,然后忽然就折起来了。然后……找不到哪里开啊!!!

关注 1 回答 1

郭大鹏 回答了问题 · 2019-02-19

解决mysql如何导出600万条记录的数据表?

目前我这么写:

<?php
/**
 * Created by IntelliJ IDEA.
 * User: felix
 * Date: 2019-03-01
 * Time: 18:49
 */

set_time_limit(0);

$servername = 'localhost';
$username   = '';
$password   = '';
$dbname     = '';

$i = 57007;

$bingTime = microtime(true);
echo 'bing ' . $bingTime . ' s' . PHP_EOL;

while (9690183 > $i) {
    $i++;

    A:

    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);

    /* check connection */
    if ($conn->connect_errno) {
        printf("Connect failed: %s\n", $conn->connect_error);
        sleep(3);
        goto A;
    }

    $pySql = "select count(*) as sum from wzjs_product_journal_21_6 where product_journal_id = {$i}";

    $result = $conn->query($pySql);

    if ($result === false) {
        printf("Invalid query: %s\nWhole query: %s\n", $conn->error, $pySql);
    }

    if ($result->fetch_assoc()['sum'] == 0) {
        $pySql = "INSERT INTO wzjs_product_journal_21_6 SELECT * FROM wzjs_product_journal_21 WHERE product_journal_id = {$i}";

        $result = $conn->query($pySql);

        if ($result === false) {
            printf("Invalid query: %s\nWhole query: %s\n", $conn->error, $pySql);
        }
    }

    usleep(5);

    $conn->close();

    usleep(5);
}

$endTime = microtime(true);
echo ' end ' . $endTime . ' s' . PHP_EOL;

$diffTime = $endTime - $bingTime;

echo 'Diff Time ' . $diffTime . ' s' . PHP_EOL;

echo 'i:' . $i . "\n";

根据主键一条一条复制。我有 9690183 多条数据需要迁移,因为之前的表加不上索引了……

不过不知为啥,经常出

PHP Warning:  mysqli::mysqli(): (HY000/2002): No such file or directory in /data/wwwroot/www.scienceport.cn/copy_2.php on line 24

上面的 goto 就是打算解决这个问题。目前正在测试。
之所以先查询后复制是之前老是自己就停了。而且现在也这样,连接着 shell 才会执行的比较久, 用的阿里云,关掉 shell 没多久就自己停了。就是必须看着它,要不然就自己跑不见了……
这样运行的

php copy.php > copy.log &

在写这个的时候,又打印log了,不过这个程序挺过去了……

2019年03月04日
这个也不可靠,有100多万条不知道为啥没过去……正在寻找故障原因。
No such file or directory 貌似是阿里云出故障了,反正今天有新闻。

2019年03月11日
发现写入数据不等会有的情况索引是不会加上的,而且还丢东西。现在都能复制走了。

2019年03月12日
https://my.oschina.net/guodap...
这个链接写了如何退出ssh也能继续运行。

关注 3 回答 3

郭大鹏 回答了问题 · 2019-02-19

websocket 消息发送后回调

       // 创建websocket
       ws = new WebSocket("ws://xxx:xxx");
       // 当socket连接打开时,输入用户名
       ws.onopen = onopen;
       // 当有消息时根据消息类型显示不同信息
       ws.onmessage = onmessage; 
       ws.onclose = function() {
          console.log("连接关闭,定时重连");
          connect();
       };
       ws.onerror = function() {
           console.log("出现错误");
       };

有一个一开始发送一条消息的方法。

ws.onopen

当然这个可能还是不能解决你的问题。不过 下面是一个 PHP聊天室框架 的例子。js 部分还是可以参考的。

https://github.com/walkor/wor...

关注 5 回答 4

郭大鹏 关注了标签 · 2019-01-27

golang

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言。

七牛云存储CEO许式伟出版《Go语言编程
go语言翻译项目 http://code.google.com/p/gola...
《go编程导读》 http://code.google.com/p/ac-m...
golang的官方文档 http://golang.org/doc/docs.html
golang windows上安装 http://code.google.com/p/gomi...

关注 26002

郭大鹏 关注了标签 · 2019-01-27

angular

AngularJS 是一款由 Google 维护的开源 JavaScript 库,用来协助单一页面应用程序运行。它的目标是通过 MVC 模式(MVC)功能增强基于浏览器的应用,使开发和测试变得更加容易。在版本 2 大改(最突出的改变的全面使用 TypeScript)之后改名 Angular,第 N 版以 Angular N 的形式命名。

关注 311

郭大鹏 关注了标签 · 2019-01-27

ionic

The beautiful, open source front-end framework for developing hybrid mobile apps with HTML5.

关注 305

郭大鹏 回答了问题 · 2019-01-16

解决NG-ZORRO-MOBILE 宫格 Grid 的 icon 如何使用相对路径

这个问题最终解决了。但是和我想要的方案不一样。
使用了 https://www.iconfont.cn/ 提供的 iconfont 文件。
直接使用了 demo 里面提供提供的 Symbol 方法。
在 入口 html 哪里直接引用了 iconfont.js,看上去十分的尴尬。

图片描述

关注 1 回答 1

郭大鹏 关注了专栏 · 2019-01-14

技术放肆聊

公众号:技术放肆聊

关注 2277

郭大鹏 关注了专栏 · 2019-01-14

codergoose‘s blog

Java Web技术栈,后端工程师,专栏用来笔记记录整理

关注 487

郭大鹏 关注了专栏 · 2019-01-14

四魂之域

在学习和工作中成长。

关注 990