Coder Social home page Coder Social logo

weapp-socketio / weapp.socket.io Goto Github PK

View Code? Open in Web Editor NEW
680.0 20.0 173.0 1.06 MB

A WebSocket client for building WeChat Mini Program implement by socket.io

Home Page: http://weappsocket.matong.io

License: MIT License

JavaScript 100.00%
tarojs mpvue chameleon socket wepy websocket-client wechat-mini kbone

weapp.socket.io's Introduction

A WebSocket client for building WeChat Mini Program implement by socket.io

Feature

Full feature socket.io style implemented, based-on [email protected] version, such as:

  • send message queue
  • auto reconnect
  • ping, pong
  • room, namespaces

Platform Support

  • 微信
  • 支付宝

Demos

Official Framework , Wepy Framework

Install

If you use a third-party framework such as wepy, you should install via npm

$ npm install weapp.socket.io

Or if you use the native way to write code,I recommend using git clone

$ git clone https://github.com/weapp-socketio/weapp.socket.io

# development mode
$ npm run build-dev

# production mode
$ npm run build

$ cp path/weapp.socket.io/dist/weapp.socket.io.js path/your_weapp_dir

Usage

code style is same to socket.io-client

const io = require('./yout_path/weapp.socket.io.js')

const socket = io('https://socket-io-chat.now.sh')

socket.on('connect', () => {
  console.log('connection created.')
});

socket.on('new message', d => {
  const {
    username,
    message
  } = d;
  console.log('received: ', username, message)
});

socket.emit('add user', "Jack");

API

See socket.io-client API

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

weapp.socket.io's People

Contributors

bobjiang1988 avatar chuilee avatar dependabot[bot] avatar gongzili456 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weapp.socket.io's Issues

socket query第二次连接时无法更新

代码如下,当第二次连接指定query时, socket无法更新

socket = io(socket_url + roomid, {
    query: "openid=" + openid + "&sessionid=" + sessionid,
    upgrade: false,
    transports: ['websocket']
});
socket.connect()

hbuilderx APP 环境编译包冲突

JSON.stringify cannot serialize cyclic structures

今天从该仓库拉取到本地重新编译的。
我链接的服务端数据能够正常收发。但是上面的错误一直在报,从而也导致我其它业务无法正常使用。

socket.emit ack fun dose not work

this.socket = io('socketUrl')

this.socket.on('connect', () => {
    console.log('connect')
})

this.socket.emit('match', {
    user: this.me,
}, (data) => {
    console.log(data)
})

cant got data

服务器端使用 netty-socketio 后有bug

如果服务器端使用 netty-socketio(java语言)。连接如果指定namespace的话(path:"/abc"),会出错,无法连接成功。希望作者可以看看:failed: Error during WebSocket handshake: Unexpected response code: 400

nameSpace

感谢开源~~
遇到部分问题~
前端指定nameSpace后,nameSpace增加一个逗号(socket.io-client不加)
image

针对该逗号,服务端存在不同处理。

Netty-socketio

image
image
根据来源选择是否去除逗号,header的会自动去除逗号,而body的不会去除

Socket.io

均去除该逗号

不太好界定是不是Bug,
向您请教~
感谢闲时解答~谢谢~

can not work with wepy

找不到文件: xxxx/node_modules/weapp.engine.io/lib/transports/polling-xhr

module "npm/weapp.engine.io/lib/transports/index.js" is not defined
Error: module "npm/weapp.engine.io/lib/transports/index.js" is not defined

it seems that wepy can not build well with this lib

远程调试的时候会一直发送 xhr 而无法切换到 websocket 协议

开发者工具本地测试没问题,远程调试的时候会一直发送 xhr 而无法切换到 websocket 协议

这是开发者工具的网络请求

image

这是远程调试时的网络请求

image

写了一个小 demo,这是涉及到的代码

image

这是在 socket.io 执行io('your server address')得到的结果

image

服务端Java使用netty-socketio,微信小程序客户端连接上来时报以下错误:

2019-06-18 17:38:49.696 [nioEventLoopGroup-7-4] ERROR c.corundumstudio.socketio.handler.InPacketHandler - Error during data processing. Client sessionId: 19a2030f-c6b1-4c7a-801a-be6415b19fe4, data: deviceKey=1560850726332&deviceType=-1,
java.lang.IllegalStateException: null
at com.corundumstudio.socketio.protocol.PacketType.valueOf(PacketType.java:48)
at com.corundumstudio.socketio.protocol.PacketDecoder.readType(PacketDecoder.java:86)
at com.corundumstudio.socketio.protocol.PacketDecoder.decode(PacketDecoder.java:160)
at com.corundumstudio.socketio.protocol.PacketDecoder.decodePackets(PacketDecoder.java:142)
at com.corundumstudio.socketio.handler.InPacketHandler.channelRead0(InPacketHandler.java:65)
at com.corundumstudio.socketio.handler.InPacketHandler.channelRead0(InPacketHandler.java:36)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:288)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
at com.corundumstudio.socketio.transport.WebSocketTransport.channelRead(WebSocketTransport.java:95)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at com.corundumstudio.socketio.transport.PollingTransport.channelRead(PollingTransport.java:109)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at com.corundumstudio.socketio.handler.AuthorizeHandler.channelRead(AuthorizeHandler.java:137)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:108)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:628)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:563)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2019-06-18 17:38:49.698 [nioEventLoopGroup-7-4] ERROR c.c.socketio.listener.DefaultExceptionListener - null
java.lang.IllegalStateException: null
at com.corundumstudio.socketio.protocol.PacketType.valueOf(PacketType.java:48)
at com.corundumstudio.socketio.protocol.PacketDecoder.readType(PacketDecoder.java:86)
at com.corundumstudio.socketio.protocol.PacketDecoder.decode(PacketDecoder.java:160)
at com.corundumstudio.socketio.protocol.PacketDecoder.decodePackets(PacketDecoder.java:142)
at com.corundumstudio.socketio.handler.InPacketHandler.channelRead0(InPacketHandler.java:65)
at com.corundumstudio.socketio.handler.InPacketHandler.channelRead0(InPacketHandler.java:36)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:288)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
at com.corundumstudio.socketio.transport.WebSocketTransport.channelRead(WebSocketTransport.java:95)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at com.corundumstudio.socketio.transport.PollingTransport.channelRead(PollingTransport.java:109)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at com.corundumstudio.socketio.handler.AuthorizeHandler.channelRead(AuthorizeHandler.java:137)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:108)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:628)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:563)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

这是开源项目吗

dist/weapp.socket.io.js 里面的代码是压缩混淆过的。没有找到项目的源码

合作伙伴征集中

如果你的项目正在使用 weapp.socket.io 欢迎留下你的项目信息(名称,Logo,小程序二维码,官网等),我会将信息放在 weapp.socket.io 的 官方首页 上展出。欢迎在下面提交您的项目。

微信小程序使用socket.io连接php原生socket

小程序中 使用 socket.io ,连接php服务器中原生的socket ,连接不成功 返回连接超时 ,和连接失败!
小程序中 如果使用原生的socket , 可以连接到php服务器,返回成功,这是什么原因?

发送的数据不支持 ArrayBuffer 类型

发送 ArrayBuffer 数据时发现是发的空包过去,示例代码

const ws = io('ws://127.0.0.1:8092', {
  forceNew: true,
  reconnection: false,
})
ws.open()
ws.on('connect', () => {
  const buffer = (new TextEncoder()).encode(JSON.stringify({hello: 'world'})).buffer
  ws.emit('DATA', buffer)
})

在 Frames 看到发送的数据实际上是 ["DATA", {}],buffer 数据全丢了,所以猜测是不是目前还没有支持 ArrayBuffer

可能是bug

WS.prototype.doOpen:
success: function(res) { debug('websocket-weapp connected success.', res) this.socketTaskId = res.socketTaskId },

在微信开发者工具里:
o = e.apply(e, arguments);

success回调里的this就变成了匿名函数本身,设置socketTaskId没有意义,导致doClose也没有意义了

当多个页面共享socket.io时,会出现微信小程序 同时最多发起 2 个 socket 请求

const socket = require("../../utils/socket.js")
socket.connect((status, ws) => {
this.ws = ws;
ws.close();
ws.open();
ws.emit('quotationH5', {
"secret": "h5Socket",
"appType": "h5"
})
console.log(ws)
ws.on('quotationPushH5', res => {
console.log(res);
var data = JSON.parse(res);
var quotation = null;
for (var key in data) {
quotation = key
}
_this.setData({
key:quotation,
value: data[quotation]
})
})
})

小游戏

小游戏中不能使用?
在小程序中使用没有问题,在小游戏官方提供的打飞机游戏里面使用,没有报错,但是也没有简历websocket连接

请问支持钉钉小程序吗?

看到 todo 里有写 alipay mini program,最近做钉钉小程序需要用到 socket.io,请问这块支持什么时候可以发布~?

在android10上可能有点问题

`从客户端日志看到的情况是:

14:36:48.318 收到 connectSocket 调用

14:36:48.505 抛了 open 事件

14:37:13.511 收到 send 调用

所以这里的问题在于前端收到 open 事件之后,等待了 15s 才调用 send 接口。从你贴的代码看到,你是用了 socket.io 这个库。按你的预期,应该是调用了 socket.emit 之后就会去调用底层的 send 接口,但实际上没有。

具体原因需要你进一步排查,建议不用 socket.io 这个库,直接用原生接口尝试下是否还有这个问题。如果问题不存在了,说明是 socket.io 内逻辑异常;如果问题还存在,再提供日志我们这边定位一下。`
以上是微信官方给的答复,问题详见https://developers.weixin.qq.com/community/develop/doc/00008ef30205a02b81791310356800

小程序无法添加header

const sendHeader = {
"pt": "weixin",
"sv": "18",
"lg": "zh-CN"
};
onSocket = io.connect(server, {
path: "/" + path,
transports: ['polling'],
transportOptions: {
polling: {
extraHeaders: sendHeader
}
}
});

第二次进入的时候disconnect失效

我们websocket有两个命名空间/chat,/control,

第一次进入教室的时候
control con
chat con
正常
第一次退出教室的时候
control disconnect正常
chat disconnect正常

第二次进入时
微信小程序提示最多“同时最多发起 2 个 socket 请求,更多请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-socket.html”

connect 代码
`
zbyIm.cl = io(options.url + '/control', {'transports': ['websocket']});

zbyIm.im = io(options.url + '/chat', {'transports': ['websocket']});
`

disconnect 代码
`
/**
* disConnect
* 断开连接
*/
zbyIm.disConnect = function(){
zbyIm.cl.emit('leave_room');
zbyIm.im.emit('leave_room');

	zbyIm.cl.disconnect();
	zbyIm.im.disconnect();
};

`

web正常,微信环境不能连接

import io = require("./Libs/js/weapp.socket.io");
let socket = io("ws://192.168.1.230:8080");
console.log(socket);
socket.emit("ls@", "Fast");
socket.on("user", function(user) {
       console.log(user);
});

打印

l {io: l, nsp: "/", json: l, ids: 0, acks: {…}, …}
{
acks:{}
connected:false
disconnected:true
flags:{}
ids:0
io:l {nsps: {…}, subs: Array(4), opts: {…}, _reconnection: true, _reconnectionAttempts: Infinity, …}
json:l {io: l, nsp: "/", json: l, ids: 0, acks: {…}, …}
nsp:"/"
receiveBuffer:[]
sendBuffer:Array(1)
0:{type: 2, data: Array(2), options: {…}}
length:1
__proto__:Array(0)
subs:(3) [{…}, {…}, {…}]
_callbacks:{$connecting: Array(1), $connect: Array(1), $user: Array(1)}
__proto__:Object
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.